<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/kitchen.jpg" alt="Angela kitchen">
</div>
<p class="spy-narrative"><<if $angelaRooms.kitchen>>The kitchen smells like coffee and sawdust finally settled — cabinets hang true, and the table has history now.<<else>>Unfinished cabinets, tape measure still on the counter. She hasn't opened this room to you yet.<</if>></p>
</div>
<<populateLocation "KitchenAngela">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Empty kitchen. Try mornings or afternoons when she's home.</p>
<</if>>
<div class="menu-buttons">
[[Front entrance|AngelaHouse]]
<<if $angelaRooms.living>>[[Living room|LivingRoomAngela]]<</if>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/livingroom.jpg" alt="Angela living room">
</div>
<p class="spy-narrative"><<if $angelaRooms.living>>Soft lamp light, a couch that finally faces the right wall, and a house that knows you.<<else>>Boxes and bare walls. Not opened yet.<</if>></p>
</div>
<<populateLocation "LivingRoomAngela">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Quiet living room. Evenings are better.</p>
<</if>>
<div class="menu-buttons">
[[Front entrance|AngelaHouse]]
<<if $angelaRooms.kitchen>>[[Kitchen|KitchenAngela]]<</if>>
<<if $angelaRooms.bath>>[[Bathroom|BathroomAngela]]<</if>>
<<if $angelaRooms.office>>[[Office|OfficeAngela]]<</if>>
<<if $angelaRooms.bedroom>>[[Bedroom|BedroomAngela]]<</if>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bathroom.jpg" alt="Angela bathroom">
</div>
<p class="spy-narrative"><<if $angelaRooms.bath>>Guest towels folded. The drip is gone. Steam still ghosts the mirror some mornings.<<else>>Closed for renovation.<</if>></p>
</div>
<<populateLocation "BathroomAngela">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Empty bath. Check when she's around.</p>
<</if>>
<div class="menu-buttons">
[[Living room|LivingRoomAngela]]
[[Front entrance|AngelaHouse]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/office.jpg" alt="Angela office">
</div>
<p class="spy-narrative"><<if $angelaRooms.office>>A small home office — laptop, tidy stacks, a door that closes. Quiet hours are hers.<<else>>Door stays shut for now.<</if>></p>
</div>
<<populateLocation "OfficeAngela">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">She's not at the desk. Weekday afternoons are her window.</p>
<</if>>
<div class="menu-buttons">
[[Living room|LivingRoomAngela]]
[[Front entrance|AngelaHouse]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/bedroom.jpg" alt="Angela bedroom">
</div>
<p class="spy-narrative"><<if $angelaRooms.bedroom>>Her bedroom — soft sheets, a nightstand that once held latex gloves, a spare key that means you belong past the garden.<<else>>Bedroom stays private until she says otherwise.<</if>></p>
</div>
<<populateLocation "BedroomAngela">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Empty bed. Evenings, if she trusts you that far.</p>
<</if>>
<div class="menu-buttons">
[[Living room|LivingRoomAngela]]
[[Bathroom|BathroomAngela]]
[[Front entrance|AngelaHouse]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_small.jpg" alt="Angela backyard pool">
</div>
<p class="spy-narrative"><<if $angelaRooms.pool>>Her backyard pool — private fence, chlorine and cut grass, not the public complex. Her water.<<else>>The pool gate is still latched from your side of the story.<</if>></p>
</div>
<<populateLocation "PoolAngela">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Empty water. Afternoons when she's home.</p>
<</if>>
<div class="menu-buttons">
[[Front entrance|AngelaHouse]]
[[Garden|AngelaHouseGarden]]
</div>
</div><<set $randomNumber to Math.floor(Math.random() * 2) + 1>> /* 2 vídeos de compliment */
<<silently>>
/* Atualiza interações e stats da Angela */
<<set $neighborAngela.dailyInteractions.compliment to ($neighborAngela.dailyInteractions.compliment || 0) + 1>>
<<set $neighborAngela.love to ($neighborAngela.love || 0) + ($neighborAngela.interactions.compliment.stats.love || 4)>>
<<set $neighborAngela.corruption to ($neighborAngela.corruption || 0) + ($neighborAngela.interactions.compliment.stats.corruption || 1)>>
/* Elogiar pode aumentar o Lust dela (ou do jogador?) */
<<set $neighborAngela.lust to ($neighborAngela.lust || 0) + ($neighborAngela.interactions.compliment.stats.lust || 3)>>
<</silently>>
<div class="game-container">
<<if $neighborAngela.love >= 40 or $neighborAngela.lust >= 35>>
<<set _dialogueOptions to [
{
playerCompliment: "You look stunning today, Angela... Every time I see you, I can't keep my eyes off you.",
angelaResponse: "(Blushing deeply, biting her lip) You always know how to make my heart flutter... You're so sweet to me."
},
{
playerCompliment: "That sundress looks incredible on you. It reminds me of how soft you feel in my arms.",
angelaResponse: "(Looking down with a shy, radiant smile) Shh... not so loud out here, handsome. But... thank you. I wore it hoping you'd notice."
},
{
playerCompliment: "You have the warmest smile in this whole neighborhood, Angela. Being close to you is always the highlight of my day.",
angelaResponse: "(Softly touching your arm) You're making me melt, you know that? Having you in my life has changed everything."
}
]>>
<<else>>
<<set _dialogueOptions to [
{
playerCompliment: "You know, your garden looks absolutely amazing, Angela. You have a real talent.",
angelaResponse: "(Blushing slightly) Oh, thank you! That's so sweet of you to say. I do put a lot of work into it."
},
{
playerCompliment: "That's a really nice sundress you're wearing, it looks great on you.",
angelaResponse: "(Smiling, touches the fabric) Aw, thanks! I wasn't sure about it, but I'm glad you like it."
},
{
playerCompliment: "You always seem so cheerful, Angela. It's really nice being around you.",
angelaResponse: "(Beaming) That's one of the nicest things anyone's said to me today! Thank you."
}
]>>
<</if>>
<<set _randomCompliment to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomCompliment.playerCompliment >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
<<= _randomCompliment.angelaResponse >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/neighbor/compliment/angela_compliment_" + $randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Angela seems genuinely pleased by your kind words, her smile widening.
</p>
</div>
<br>
<div class="menu-buttons">
[[Finish Complimenting->AngelaHouse]]
</div>
</div>
<<unset _randomCompliment, _videoPath>><<set $randomNumber to Math.floor(Math.random() * 3) + 1>> /* 3 vídeos de talk */
<<silently>>
/* Atualiza interações e stats da Angela */
<<set $neighborAngela.dailyInteractions.talk to ($neighborAngela.dailyInteractions.talk || 0) + 1>>
<<set $neighborAngela.love to ($neighborAngela.love || 0) + ($neighborAngela.interactions.talk.stats.love || 5)>>
<<set $neighborAngela.corruption to ($neighborAngela.corruption || 0) + ($neighborAngela.interactions.talk.stats.corruption || 0)>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
angela: "Oh, hi again! Just taking a little break from the garden. It's beautiful weather, isn't it?",
player: "It really is perfect weather today."
},
{
angela: "How are things over at Carol's? Keeping you busy, I hope?",
player: "Yeah, she always finds something for me to do, but it's nice."
},
{
angela: "I saw the most beautiful butterfly in the garden earlier! Wish you could have seen it.",
player: "Sounds lovely! Maybe I'll spot it next time."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
<<= _randomDialogue.angela >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/neighbor/talk/angela_talk_" + $randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Angela smiles warmly, happy to chat for a moment.
</p>
</div>
<br>
<div class="menu-buttons">
[[Finish Talking->AngelaHouse]] /* Volta para a visão geral da casa da Angela */
</div>
</div>
<<unset _randomDialogue, _videoPath>><div class="game-container world-hub-container">
<h2 class="hub-title">Angela's House</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House">
</div>
<p class="spy-narrative">
<<if $angelaRooms.kitchen or $angelaRooms.living>>
The house is learning your footsteps — front door, not the rose fence. Rooms open as she lets the affair become a life.
<<else>>
Angela's place from the front: neat garden path, a door that still feels like a threshold. The garden secret was outside. Inside is something she has to invite.
<</if>>
</p>
</div>
<<populateLocation "AngelaHouse">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">She may be in the garden or out. Mornings at the house are her best window; garden mid-morning.</p>
<</if>>
<div class="hub-navigation-grid" style="margin-top:16px;">
<div class="location-item">
<div class="location-overlay">[[Garden|AngelaHouseGarden]]</div>
<img src="img/layout/angela_garden/garden.jpeg" alt="Garden">
</div>
<<if $angelaRooms.kitchen>>
<div class="location-item">
<div class="location-overlay">[[Kitchen|KitchenAngela]]</div>
<img src="img/layout/angela_house/kitchen.jpg" alt="Kitchen">
</div>
<</if>>
<<if $angelaRooms.living>>
<div class="location-item">
<div class="location-overlay">[[Living room|LivingRoomAngela]]</div>
<img src="img/layout/angela_house/livingroom.jpg" alt="Living room">
</div>
<</if>>
<<if $angelaRooms.bath>>
<div class="location-item">
<div class="location-overlay">[[Bathroom|BathroomAngela]]</div>
<img src="img/layout/angela_house/bathroom.jpg" alt="Bathroom">
</div>
<</if>>
<<if $angelaRooms.office>>
<div class="location-item">
<div class="location-overlay">[[Office|OfficeAngela]]</div>
<img src="img/layout/angela_house/office.jpg" alt="Office">
</div>
<</if>>
<<if $angelaRooms.bedroom>>
<div class="location-item">
<div class="location-overlay">[[Bedroom|BedroomAngela]]</div>
<img src="img/layout/angela_house/bedroom.jpg" alt="Bedroom">
</div>
<</if>>
<<if $angelaRooms.pool>>
<div class="location-item">
<div class="location-overlay">[[Her pool|PoolAngela]]</div>
<img src="img/layout/pool/pool_sunny_small.jpg" alt="Pool">
</div>
<</if>>
<div class="location-item">
<div class="location-overlay">[[Neighborhood|Neighborhood]]</div>
<img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="Neighborhood">
</div>
<div class="location-item">
<div class="location-overlay">[[Carol's House|CarolHouse]]</div>
<img src="img/layout/house/house.jpg" alt="Carol's House">
</div>
</div>
<<if not $angelaRooms.kitchen and $missions.AM005 and $missions.AM005.status is 0 and $scenes.AngelaThanksHandjob and $scenes.AngelaThanksHandjob.status is 1>>
<p class="mission-narrative-focus">The garden gloves were outside. She wants the front door now — unfinished kitchen, daylight, belonging. If she's home, start there.</p>
<</if>>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_garden/garden.jpeg" alt="Angela's Garden">
</div>
<p class="spy-narrative">Roses, soil, the fence that still remembers gloves and secrets. Outside has rules — even after she let you through the front door.</p>
</div>
<<populateLocation "AngelaHouseGarden">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Empty garden. Mid-morning is her usual watering window.</p>
<</if>>
<div class="menu-buttons">
[[Front entrance|AngelaHouse]]
<<if $angelaRooms.pool>>[[Her pool|PoolAngela]]<</if>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative">
After you finished cleaning the bathroom, you find Aunt Carol in the living room. She seems a bit flustered, holding a small, neatly wrapped package in her hands.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Blushing Face">
</div>
<div class="dialog-text carol">
Oh, sweetie, there you are! You're such a lifesaver. Listen, I have another tiny favor to ask, if you don't mind... I feel a bit silly asking after all you've done today.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
It's no problem at all, Aunt Carol. What do you need?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Blushing Face">
</div>
<div class="dialog-text carol">
Well, this is a little something for Angela, our neighbor. I was going to take it over myself, but I've just gotten a bit... sidetracked. Would you be an absolute angel and run it over to her house for me? It's nothing urgent, just whenever you're heading out or have a moment this afternoon.
</div>
</div>
<p class="spy-narrative">
She hands you the small package. It's surprisingly light. You wonder what's inside, but her slightly flushed expression suggests it's best not to ask too many questions right now.
</p>
<!-- Conclusão da Missão - Aceitar levar o pacote -->
<div id="completion-section" style="text-align: center; margin-top: 25px;">
<p style="font-style: italic; color: #D4AF37; margin-bottom: 15px;">
You take the package. Now you need to deliver it to Angela's house.
</p>
<div class="menu-buttons">
<<link "Sure, I can do that for you.">>
<<set $missions["009"].status to 1>> /* Marca esta missão (o pedido) como concluída */
<<set $auntCarol.love += 5>> /* Recompensa de amor por aceitar */
<<run $player.inventory.pushUnique("AngelaPackage")>> /* Adiciona o item ao inventário do jogador */
/* O tempo não avança aqui, apenas o acordo foi feito e o item recebido */
<<goto "DeliverPackageToAngela">> /* Retorna para a visão da sala de estar */
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative">
You find Aunt Carol back in the living room, perhaps reading a book or watching TV. She looks up expectantly as you approach.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Hey Aunt Carol, just wanted to let you know I dropped off that package with Angela. She seemed really happy to get it and said to thank you.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
Oh, wonderful! Thank you so much for doing that, sweetie. You're such a good help. Angela is a real dear, isn't she? Always so sweet.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Yeah, she was very nice. Her garden looks amazing too.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
It really does! She puts so much work into it. You know, she sometimes mentions needing an extra pair of hands for the heavier stuff. She usually asks some of the neighborhood boys to help out when they're around, but it's been a while since there's been anyone reliable... *Hint hint*. Just something to keep in mind if you're ever looking for a way to be neighborly... or earn a little extra.
</div>
</div>
<p class="spy-narrative">
Aunt Carol gives you a knowing little smile. It seems she's already planting ideas for how you can spend your time... and perhaps get to know the neighbors better.
</p>
<!-- Conclusão da Missão -->
<div id="completion-section" style="text-align: center; margin-top: 25px;">
<p style="font-style: italic; color: #D4AF37; margin-bottom: 15px;">
Delivery confirmed! Aunt Carol seems pleased, and you've got a new lead on potential activities.
</p>
<div class="menu-buttons">
<<link "Good to know. Thanks, Aunt Carol!">>
<<set $missions["011"].status to 1>>
<<set $auntCarol.love += 10>>
<<set $time += 1>>
/* O tempo não precisa necessariamente avançar aqui, pois foi uma conversa rápida */
<<goto "BathroomCleaning">> /* Retorna para a visão da sala de estar */
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House with Flowers">
</div>
<p class="spy-narrative">
You arrive at Angela's charming house, the package for her in hand. You ring the doorbell, and after a moment, Angela opens the door with a warm, welcoming smile.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Oh, hi there! What a pleasant surprise. What brings you over?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Hi Angela. Aunt Carol asked me to drop this off for you. She said you were expecting it?
</div>
</div>
<p class="spy-narrative">
You hand her the small package. Angela's eyes light up, and she takes it with a grateful expression.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Oh, wonderful! Yes, I was. Thank you so much for bringing it over, that's so thoughtful of Carol... and of you for making the trip! Please, tell Carol I said thanks a million! Here, for your trouble...
</div>
</div>
<p class="spy-narrative">
She presses a small amount of money into your hand with another bright smile. She seems genuinely happy to receive the package.
</p>
<!-- Conclusão da Missão - Pacote Entregue -->
<div id="completion-section" style="text-align: center; margin-top: 25px;">
<p style="font-style: italic; color: #D4AF37; margin-bottom: 15px;">
Package delivered successfully to Angela! She seemed very pleased.
</p>
<div class="menu-buttons">
<<link "Alright, I'll let Carol know. See you, Angela!">>
<<set $missions["010"].status to 1>>
<<set $neighborAngela.love += 10>>
<<set $player.money += 10>>
<<set $player.energy -= 2>> /* Pequeno custo pela caminhada/interação */
/* Tempo gasto na entrega */
/* Remover "AngelaPackage" do inventário do jogador */
<<run $player.inventory = $player.inventory.filter(item => item !== "AngelaPackage")>>
<<goto "AngelaAfternoonWalkSpy">> /* Retorna para a visão da casa da Angela (de onde pode sair) */
<</link>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Help Angela Plant Flowers
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House Garden">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You arrive at Angela's house in the morning and find her in the backyard, kneeling by a section of her garden. She has various gardening tools and supplies laid out nearby. She looks up with a bright smile when she sees you approaching.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Oh, perfect timing! I was just about to start planting these new flower seeds. Would you mind giving me a hand? I could really use some help, and it's always more fun with company! Don't worry, I'll guide you through everything.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Of course, Angela! I'd be happy to help. I don't know much about gardening, but I'm willing to learn.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Wonderful! Don't worry, I'll walk you through each step. By the end of this, we'll have a beautiful flower garden, and you'll know the basics of planting. Let's get started!
</div>
</div>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="planting-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Water Angela's Plants
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House Garden">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You return to Angela's garden the next morning and find her examining her newly planted flowers. She looks up with a warm smile when she sees you approach, holding a watering can in her hands.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Oh, perfect timing again! The plants we planted yesterday are looking good, but they need their daily watering. Would you mind helping me? But be careful - each type of plant needs different amounts of water. Too little and they'll be thirsty, too much and you might drown them!
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Sure, I'd be happy to help! I'll be careful with the watering. Just tell me what each plant needs.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Wonderful! I'll give you hints for each plant. Remember, different flowers have different needs - some like lots of water, others prefer just a gentle sprinkle. Listen carefully and you'll do great!
</div>
</div>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="watering-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div>
/* ANGELA PHASE 2 MISSIONS START */<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Front Door Rules</p>
<p class="mission-narrative-focus">After the garden gloves, she won't do the fence forever. Stuck cabinet. Tool belt. Front door in daylight — belonging, not a rose-bush secret.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">That night by the potting bench… that was outside. Outside has rules. I still think about the gloves. If you're going to keep showing up, you use the front door. You help finish this kitchen. Not sneaking through the roses like we got away with something.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Front door. Tools. I'm in — properly this time.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am005-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Measure Twice</p>
<p class="mission-narrative-focus">Unfinished kitchen. She needs widths for the cabinet doors — dials for width, height, level. Sawdust still on the floor. She still won't kiss you on it.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Measure twice. Cut once. If the level's off, the whole door hangs crooked — like us, if we're not careful.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll get the numbers right.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am006-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Taste Test</p>
<p class="mission-narrative-focus">She mixes something at the counter — part recipe, part tease. Pick base, spice, finish. Too much heat and she laughs you out of the kitchen.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Cooking is like… the other thing. Balance. If you dump the whole jar of spice, you ruin it. Taste with me.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll follow your lead on the heat.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am007-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Slice & Scroll</p>
<p class="mission-narrative-focus">City patio table. Pizza, smoothie, her phone face-down — then flipped. The lingerie selfie is for you. Not an ex. Budget the tip without blowing the date.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Don't make a face. I took it for tonight. For you. Scroll if you want — then finish your slice like a normal date.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'm looking. I'm also trying not to choke on mozzarella.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am008-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Make It Official</p>
<p class="mission-narrative-focus">Same patio energy. She wants a kiss photo — you in frame. Balance Courage and Softness or the capture fails and she blushes it off.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Hold the phone out. Kiss me like you mean it — not like Carol's watching from the hedges.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Ready when you are.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am009-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Trail Prep</p>
<p class="mission-narrative-focus">Park trailhead. She won't hike until every safety box is green — water, shoes, map, "don't tell Carol the route."</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Check the list. If we get lost because you forgot water, I'm blaming your aunt's nephew forever.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Checklist. Green lights. Let's go.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am010-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Steep Climb</p>
<p class="mission-narrative-focus">Switchbacks. Dual meters — Stamina and Heat. Push too hard on heat and she makes you stop and breathe.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Pace me. Look at the trail, not… well. You know. Climb first. Summit later.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Eyes on the path. Mostly.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am011-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Summit Dare</p>
<p class="mission-narrative-focus">Ridge stills, progressive. She dares a little more jacket, a little more skin. Finish the still chain and she pulls you off-trail.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Nobody up here. Jacket open… more? Tell me when to stop — or don't.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I won't stop you.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am012-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Weekend Splash</p>
<p class="mission-narrative-focus">Her backyard pool — not the complex, not Carol's. Ops checklist before she unlocks the gate tile for good.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">My water. My rules. Skim, chemicals, towels, fence latch — then you can look at the bikini.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll earn the gate code.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am013-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Sunscreen</p>
<p class="mission-narrative-focus">Lounge chair. SPF map — hit every lotion zone without rushing the sensitive ones. Payoff is pool heat, not a lecture.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Every spot. Even the ones that make you shy. Especially those.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Hands careful. Thorough.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am014-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Sunrise Cup</p>
<p class="mission-narrative-focus">Morning kitchen. Ordered coffee sequence — grind, brew, cream, carry to bed. Domestic belonging, not garden secrecy.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">You stayed. So you get coffee duty. Don't burn my kitchen after we finally finished it.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Two cups. One for the woman who let me stay.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am015-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Soft Landing</p>
<p class="mission-narrative-focus">Living room light low. Dual meters Pace and Praise — she wants a titjob that feels like gratitude, not a raid.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Slow. Tell me I'm pretty when you lose your mind. I need both.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Pace and praise. I hear you.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am016-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Settling In</p>
<p class="mission-narrative-focus">Living room boxes. Memory match the furniture layout — couch, lamp, plant, rug. Unlock the room tile for real.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">If this place is going to feel like a home — with you in it — we finish the living room. Match the pairs. No cheating.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Couch to couch. I can do that.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am017-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Guest Towels</p>
<p class="mission-narrative-focus">Bathroom drip. Pipe Fix Kit — match wrench, tape, washer in order. Guest towels wait until the leak dies.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">If you want a shower key later, fix my drip first. Romance after plumbing. Always.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Wrench first. Towels after.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am018-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Quiet Hours</p>
<p class="mission-narrative-focus">Her home office inbox is chaos. Pin, hide, or ignore — clear three proof tasks without panicking her afternoon.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Quiet hours. If you help me clear this, maybe the office becomes… less boring. Pin what matters.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Triage mode. On it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am019-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Spare Key</p>
<p class="mission-narrative-focus">After the kitchen table… she trusts you with the bedroom and a spare. Key bowl. House rules. Overnight path opens.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">You were inside me in my kitchen. The least I can do is give you a key that isn't a secret. Rules still apply.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Key and rules. I'll honor both.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am020-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Night Watering</p>
<p class="mission-narrative-focus">Garden dusk. Gloves again — not latex this time. Dual meters Control and Soft. She admits she liked deciding when you finished.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">The gloves that night… I liked being the one who said when. Is that weird? Water the roses. Talk to me.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Not weird. Tell me more.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am021-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Carol's Lights</p>
<p class="mission-narrative-focus">Fence line. Carol's kitchen light is on. Heat/stealth protocol — keep the secret soft while the roses get watered.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Her light's on. Whisper. If she sees us like this, I become the neighbor who ruined Thanksgiving forever.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Quiet. Careful. Still here.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am022-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Who Holds the Gloves</p>
<p class="mission-narrative-focus">Living room. Path fork — devoted soft lover, or the private register where she runs the gloves. Both valid. No latex without this choice.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">I need you to say it. Soft with me… or you liked when I ran it. I won't invent a version of us you didn't pick.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll choose. Honestly.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am023-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: House Rules</p>
<p class="mission-narrative-focus">Bedroom. Domme path only. Safe word joke, garden gloves vs these, rule pins. Then the latex register unlocks for real.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face"></div>
<div class="dialog-text angela">Safe word is "roses." Say it and soft Angela comes back. Until then… you asked me to hold the gloves.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Roses. I understand.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="am024-content"></div>
</div>
</div>
/* ANGELA PHASE 2 MISSIONS END */<<approachCharacter "neighborAngela">><<silently>>
<<set _approach to [
"She's stretching on her front lawn, ponytail damp, breathing hard. She catches your eye and waves you over.",
"She finishes her run as you arrive. She doesn't bother to cool down — just walks straight to you, smiling.",
"\"I was hoping you'd come by,\" she says, peeling off her sweat-stuck top and fanning herself with it. \"Walk with me?\""
].random()>>
<<set _during to [
"She leads you on the same neighborhood walk. Slower this time. Closer.",
"She hands you her phone. \"Make me look good. You know how I like it.\" She poses against the rose hedge.",
"She poses among the flowers again, but the angles are bolder. She's trusting your camera now. Trusting more than that."
].random()>>
<<set _outcome to [
"She takes the phone back and scrolls through. \"You're getting good at this. Dangerous.\"",
"She fans her face, then your face. \"I should run alone. But I don't think I want to.\"",
"She kisses you on the cheek and walks back inside. \"Tomorrow, same time?\""
].random()>>
<<set _video to $scenes["AngelaWalkingSpy"].replay.videos.random()>>
<<applyReplay "AngelaWalkingSpy">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Walk back home->AngelaHouse]]
</div>
</div><<silently>>
<<set _approach to [
"She checks the fence toward Carol's, then tips her chin at the potting bench. \"Outside rules still stand.\"",
"\"You came back,\" she says, already pulling the gloves from the garden tote.",
"Behind the roses again. She pats the potting-bench edge. \"You know the deal.\""
].random()>>
<<set _during to [
"Latex on bare skin again. She does it without hurry — not nervous. Enjoying the control.",
"Wordless. Just her hands, her stare, and the risk of a car on the far street.",
"She switches grip mid-stroke, eyes on your face. \"I decide when. Tell me nothing.\""
].random()>>
<<set _outcome to [
"She wipes the gloves on a garden rag and laughs soft. \"Fence secret. Don't ruin it.\"",
"She kisses your cheek. \"Front door when you mean it. Roses when you can't wait.\"",
"She helps you stand. \"Go — Carol counts minutes. Same gloves next time.\""
].random()>>
<<set _video to $scenes["AngelaThanksHandjob"].replay.videos.random()>>
<<applyReplay "AngelaThanksHandjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/angela_garden/garden.jpeg" alt="Angela's Garden">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip back through the roses->AngelaHouseGarden]]
</div>
</div>
/* ANGELA PHASE 2 REPLAYS START */<<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS003"].replay.videos.random()>>
<<applyReplay "AS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="tease">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay on the couch->LivingRoomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS004"].replay.videos.random()>>
<<applyReplay "AS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="oil">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay in bed->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS005"].replay.videos.random()>>
<<applyReplay "AS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="fishnet">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Help with laundry later->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS006"].replay.videos.random()>>
<<applyReplay "AS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/park/park_preview.jpg" alt="hike">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave the trail->Park]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS007"].replay.videos.random()>>
<<applyReplay "AS007">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="shower">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->BathroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS008"].replay.videos.random()>>
<<applyReplay "AS008">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_cluttered_small.jpg" alt="office">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave the office->OfficeAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS009"].replay.videos.random()>>
<<applyReplay "AS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="oral">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Fetch water->LivingRoomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS010"].replay.videos.random()>>
<<applyReplay "AS010">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="titjob">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Clean up soft->LivingRoomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS011"].replay.videos.random()>>
<<applyReplay "AS011">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_small.jpg" alt="pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->PoolAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS012"].replay.videos.random()>>
<<applyReplay "AS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="sex">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Wipe the table->KitchenAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS013"].replay.videos.random()>>
<<applyReplay "AS013">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="overnight">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sleep in->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS014"].replay.videos.random()>>
<<applyReplay "AS014">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="morning">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sip coffee->KitchenAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS015"].replay.videos.random()>>
<<applyReplay "AS015">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="femdom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Hold her soft->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS016"].replay.videos.random()>>
<<applyReplay "AS016">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="oral">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Promise silence->BedroomAngela]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that soft neighbor smile that means yes without saying it.",
"The house already knows the mood — you only have to step closer.",
"She tips her chin toward the room. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little secret — the way she likes it.",
"She keeps a shy edge even when she takes control of the pace.",
"Breath, fabric, a laugh she tries to swallow."
].random()>>
<<set _outcome to [
"She fixes her hair like nothing wild just happened. \"Same rules next time.\"",
"\"Don't make it weird over the fence,\" she says, almost smiling.",
"She points you gently toward the door. \"I still water roses in the morning.\""
].random()>>
<<set _video to $scenes["AS017"].replay.videos.random()>>
<<applyReplay "AS017">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="anal">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="changing-video-container" style="text-align:center;">
<video controls autoplay loop muted playsinline style="max-width:720px;width:100%;border-radius:8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Fetch water->BedroomAngela]]
</div>
</div>
/* ANGELA PHASE 2 REPLAYS END */<div class="game-container spy-scene-container"> <!-- Reutilizando a classe base para o container da cena -->
<!-- PARTE 1: A OBSERVAÇÃO E O FLAGRA -->
<div class="environment-container">
<p class="spy-narrative" style="margin-top: 15px; font-size: 1.1em;">
It's a warm afternoon. You find yourself idly looking out a window (or perhaps you're in the front yard of Carol's house) when you spot Angela jogging down the street. She's in athletic wear that accentuates her fit physique, her ponytail bouncing with each stride.
</p>
</div>
<!-- GIF INICIAL DELA CORRENDO -->
<div class="changing-video-container" style="text-align: center;">
<video autoplay loop muted playsinline src="img/chars/neighbor/etc/angela_walking.webm" style="pointer-events: none; max-width: 460px; width: 100%; height: auto; border-radius: 8px; display: inline-block;" alt="Angela jogging down the street"></video>
</div>
<p class="spy-narrative">
You can't help but watch her. There's an effortless grace to her movements. She seems focused on her run, unaware of your gaze... or so you think. As she passes by Carol's house, she glances over, her eyes meeting yours directly. She slows her pace, a slightly surprised but friendly smile appearing on her face, and waves, then gestures for you to come over.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Caught)">
</div>
<div class="dialog-text player">
(Thinking) Shit! She saw me. Okay, act natural... or as natural as someone caught staring can act.
</div>
</div>
<p class="spy-narrative">
You hesitantly step out or walk towards the edge of the property.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Friendly Face">
</div>
<div class="dialog-text angela">
Hey there! Enjoying the view? Just kidding! Taking a little break from my run. It's such a gorgeous day, isn't it? I was actually thinking of slowing down to a walk for a bit and maybe taking some pictures of the neighborhood flowers. You wouldn't mind joining me for a stroll, would you? And... this might be a weird ask, but could you maybe snap a few photos for me? My selfie skills are terrible!
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(A bit flustered) Uh, hi Angela! Yeah, sure, a walk sounds nice. And photos? No problem, I can do that.
</div>
</div>
<hr style="border-color: rgba(200, 180, 220, 0.2); margin: 25px 0;">
<!-- PARTE 2: A CAMINHADA E AS FOTOS -->
<p class="spy-narrative">
She beams. "Great! Come on then!" You fall into step beside her as she transitions from a jog to a brisk walk. She points out various flowers and interesting spots in the neighborhood, chatting amiably. Then, she hands you her phone.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Posing/Smiling Face">
</div>
<div class="dialog-text angela">
Okay, how about here? Get a few of me with these roses? Just... make me look good, okay?
</div>
</div>
<!-- VÍDEO DA CAMINHADA E FOTOS -->
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 460px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/neighbor/etc/angela_walking_long.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
The video shows you walking alongside her as she points things out, occasionally stopping to pose playfully or naturally while you "take her picture". She seems to enjoy the attention, her movements becoming a little more flirty, her poses a bit more suggestive as the walk continues. It's a surprisingly pleasant, if slightly charged, interaction.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Happy/Thankful Face">
</div>
<div class="dialog-text angela">
These are perfect! Thank you so much! You're a way better photographer than I am. Well, this was fun! I should probably finish up my cooldown. See you around!
</div>
</div>
<p class="spy-narrative">
She takes her phone back, gives you another bright smile, and with a little wave, continues on her way, leaving you with the lingering scent of her light perfume and the memory of her playful poses.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Head back towards Carol's house...">>
<<set $scenes["AngelaWalkingSpy"].status to 1>>
<<set $neighborAngela.lust += 10>>
<<set $player.corruption += 5>> /* Um pouco de corrupção por "tirar as fotos" */
<<set $neighborAngela.love += 5>> /* Ela gostou da companhia e da ajuda */
/* <<set $time += 1>> // Opcional: se a caminhada e fotos consumirem tempo */
<<goto "ConfirmAngelaDelivery">> /* Ou para o local de onde o jogador saiu para encontrá-la */
<</link>>
</div>
</div><div class="game-container spy-scene-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/neighbor/tease/angela_at_garden.webp" alt="Angela in the garden">
</div>
<p class="spy-narrative" style="margin-top: 15px; font-size: 1.1em;">
Sunset cuts long shadows across Angela's garden. You're both sweaty from the planting. She checks the fence toward Carol's place, then tips her chin at the potting bench — half-hidden by roses. Outside. Not her front door. Not her kitchen. Not her bed.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
I can't thank you enough. The garden looks… alive. Stay on this side of the fence, okay? If Carol sees us go inside, I turn into the neighbor who ruined Thanksgiving. Out here we have… rules. And I still want to thank you properly.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Rules. Fence. Roses. Not lemonade.
</div>
</div>
<p class="spy-narrative">
She steers you behind the potting bench where the hedge blocks the street. Her dirt-stained work shirt comes up over her head — quick, bold, half-guilty.
</p>
<div class="changing-video-container" style="text-align: center;">
<video autoplay loop muted playsinline src="img/chars/neighbor/tease/angela_show_tits.webm" style="pointer-events: none; max-width: 480px; width: 100%; height: auto; border-radius: 8px; display: inline-block;" alt="Angela removing her shirt"></video>
</div>
<p class="spy-narrative">
Braless in the evening air. Nipples tight from the chill and the risk. She smirks like she can't believe she's doing this either.
</p>
<hr style="border-color: rgba(200, 180, 220, 0.2); margin: 25px 0;">
<p class="spy-narrative">
From a garden tote — not a nightstand — she pulls a pair of sleek black latex gloves. Cleaning gloves. Tool gloves. Something that should not feel this filthy.
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/etc/items/black_gloves.webp" alt="Black latex gloves" style="max-width: 300px; border-radius: 8px;">
</div>
</div>
<p class="spy-narrative">
She rolls them on finger by finger, voice soft, pace hers.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
Drop your pants. You've been such a good helper. Auntie Ang— I mean, Angela — is going to take care of that tension. Quietly. Before anyone looks over the fence.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Latex. Garden. Her rules. You're not saying no.
</div>
</div>
<p class="spy-narrative">
You comply. She sits you on the potting-bench edge, kneels close, bare breasts brushing your thighs. Gloved hands find you. She sets the rhythm.
</p>
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 1080px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/neighbor/handjob/angela_handjob_cum.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Smooth latex, firm strokes, her eyes on yours when a car passes on the far street. "You wanted this all afternoon," she whispers. "I decide when." She does — and you finish hard over her gloves and stomach, biting down a sound. She milks the last pulse with a slow, satisfied smile.
</p>
<div class="dialog-container" style="margin-top: 20px;">
<div class="dialog-image">
<img src="img/chars/neighbor/face/angela_face.jpg" alt="Angela Face">
</div>
<div class="dialog-text angela">
(Wiping her hands on a garden rag) All better. That was… outside. Outside stays outside. Now go — before Carol starts counting minutes.
</div>
</div>
<p class="spy-narrative">
She pulls her shirt back on like a neighbor again. The gloves go back in the tote. The front door stays closed. You still feel her pace in your bones.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Slip back through the roses, spent and dazed...">>
<<set $scenes["AngelaThanksHandjob"].status to 1>>
<<if $scenes["AngelaGardenThanksHJ"]>><<set $scenes["AngelaGardenThanksHJ"].status to 1>><</if>>
<<if $scenes["AS002"]>><<set $scenes["AS002"].status to 1>><</if>>
<<set $neighborAngela.lust += 25>>
<<set $neighborAngela.corruption += 10>>
<<set $neighborAngela.love += 15>>
<<set $neighborAngela.domination += 5>>
<<set $player.lust += 20>>
<<set $player.energy -= 10>>
<<goto "SkylarHeavyBoxes">>
<</link>>
</div>
</div>
/* ANGELA PHASE 2 SCENES START */<div class="game-container spy-scene-container">
<div id="as003-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as004-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as005-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as006-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as007-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as008-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as009-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as010-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as011-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as012-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as013-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as014-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as015-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as016-content"></div>
</div><div class="game-container spy-scene-container">
<div id="as017-content"></div>
</div>
/* ANGELA PHASE 2 SCENES END */<div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Even her bathroom looks like it's never been used. Everything is sparkling. It's almost intimidating.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/bathroom.jpg" alt="Brandi's luxurious bathroom">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BathroomBrandi">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The bathroom is empty right now. Just the sparkle of cleanliness.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Bathroom->BrandiHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Her bedroom. This feels like a very dangerous place to be uninvited. Everything is white, grey, or silver. So impersonal.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/bedroom.jpg" alt="Brandi's cold and stylish bedroom">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BedroomBrandi">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The bedroom is empty right now. Just the cold silence.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Bedroom->BrandiHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Her garden is a work of art. Not a single leaf out of place. It's clear she pays someone a lot of money to keep it this way.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/garden.jpg" alt="Brandi's perfectly manicured garden">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "GardenBrandi">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The garden is empty right now. Just the scent of perfection.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Garden->BrandiHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Her kitchen is state-of-the-art. I doubt she's ever actually cooked a meal in here herself.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/kitchen.jpg" alt="Brandi's high-tech kitchen">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "KitchenBrandi">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The kitchen is empty right now. Just the hum of high-tech appliances.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Kitchen->BrandiHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Brandi's living room... It feels more like a showroom than a place where people actually live. So cold and perfect.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/livingroom.jpg" alt="Brandi's immaculate living room">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "LivingRoomBrandi">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The living room is empty right now. Just the sterile silence.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Living Room->BrandiHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
A pristine, crystal-clear pool. It looks like it belongs in a five-star resort. I bet the water is heated to the exact perfect temperature.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/pool.jpg" alt="Brandi's luxurious pool area">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "PoolBrandi">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The pool area is empty right now. Just the sound of water.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Pool Area->BrandiHouse]]
</div>
</div>/* Entry point for the debt arc. Establishes $debts.brandi. Reachable once the
player has overheard her financial trouble (BS001 / BrandiOverheardCall). */
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/brandi_house_preview.jpg" alt="Brandi's house">
</div>
<p class="spy-narrative">You corner Brandi in her own living room with what you overheard. For once the armor cracks. She sinks onto the white leather couch and presses the heels of her hands into her eyes.</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.brandi.face" alt="Brandi"></div>
<div class="dialog-text brandi">
Fine. *Fine.* You want the truth? My husband's "investments" were a man named Castellano. He's not a banker. I owe him five thousand dollars by the end of the month or he takes the house — and he's not the type to wait politely. There. Happy?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">
Maybe I can help you find the money.
</div>
</div>
<p class="spy-narrative">She looks at you like she's recalculating everything. The balance of power between you just shifted — you both feel it.</p>
<<silently>>
<<if not $debts.brandi>>
<<set $debts.brandi to { owed: 5000, paid: 0, holder: "Castellano (gang)", dueDay: $dayNumber + 21 }>>
<</if>>
<<set $openWorldGirls.brandi.corruption += 5>>
<</silently>>
<p class="spy-narrative">(A new debt is being tracked in your Notebook: <strong>Brandi — $5,000</strong>. You'll need to decide how to raise it.)</p>
<div class="menu-buttons">
[[How do we get that kind of money?->BrandiDebtFork]]
</div>
</div><div class="game-container">
<p class="spy-narrative">Five thousand dollars in three weeks. There are two ways to make money like that fast in this town — and they lead very different places.</p>
<div class="path-choice-card">
<h3>The Fast Way</h3>
<p class="spy-narrative">Castellano runs the Outskirts — the Pit, the Alley, all of it. Fight for him, run errands for him, and the money comes quick. So does the danger. You'd be in his pocket as much as Brandi is.</p>
<div class="actions-container">
<<link "Take the gang's path">>
<<set $story.brandiDebtPath to "gang">>
<<set $player.reputation.gang += 5>>
<<goto "BrandiDebtLoanShark">>
<</link>>
</div>
</div>
<div class="path-choice-card">
<h3>The Honest Way</h3>
<p class="spy-narrative">Work for it. Jobs at the store, the gym, the mall. It's slow, and the clock is ticking — but you keep your hands clean and Brandi might actually respect you for it.</p>
<div class="actions-container">
<<link "Take the honest path">>
<<set $story.brandiDebtPath to "job">>
<<set $openWorldGirls.brandi.love += 5>>
<<goto "BrandiDebtRepay">>
<</link>>
</div>
</div>
<div class="menu-buttons">
[[Decide later->CarolHouse]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/motel.jpg" alt="Meeting Castellano">
</div>
<p class="spy-narrative">Rina takes you to a back room at the motel. The man behind the desk doesn't look up from his ledger. Castellano. He smells of cigars and patience.</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.castellano" alt="Castellano"></div>
<div class="dialog-text gang">
So you're the boy who wants to clear the Brandi woman's tab. Admirable. Stupid, but admirable. You fight for me, you run for me, and every dollar you bring me comes off her number. Lose, and you owe me too. We understand each other?
</div>
</div>
<p class="spy-narrative">(The gang path is open. Earn in the Pit and through gang work, then bring payments to the repayment screen. Castellano is now a contact in your story.)</p>
<div class="menu-buttons">
[[Get to work->BrandiDebtRepay]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">Brandi's Debt</h2>
<<if $debts.brandi>>
<div class="debt-row">
<span>Owed to <<= $debts.brandi.holder>> — due day <<= $debts.brandi.dueDay>></span>
<span>$<<= $debts.brandi.paid>> / $<<= $debts.brandi.owed>></span>
</div>
<div class="wallet-bar"><span>💰 Your cash: $<<= $player.money>></span><span>Path: <<= $story.brandiDebtPath || "undecided">></span></div>
<<if $debts.brandi.paid >= $debts.brandi.owed>>
<p class="spy-narrative">The debt is clear. However you got the money, Castellano's hold on Brandi is broken — and your hold on her is whatever you've made it.</p>
<div class="menu-buttons">[[Tell Brandi it's done->BrandiDebtResolved]]</div>
<<else>>
<p class="spy-narrative">
<<if $story.brandiDebtPath is "gang">>Castellano's men take their cut at the door. Bring what you earn in the Pit and the Alley.
<<else>>Every honest dollar counts. Keep working the jobs around town and chip away at it.<</if>>
</p>
<div class="actions-container">
<<if $player.money >= 100>>
<<link "Put $100 toward the debt">>
<<run window.AWAC.spend(100)>>
<<set $debts.brandi.paid += 100>>
<<goto "BrandiDebtRepay">>
<</link>>
<</if>>
<<if $player.money >= 500>>
<<link "Put $500 toward the debt">>
<<run window.AWAC.spend(500)>>
<<set $debts.brandi.paid += 500>>
<<goto "BrandiDebtRepay">>
<</link>>
<</if>>
</div>
<<if $player.money < 100>>
<p class="mission-narrative-focus">You don't have enough on you to make a payment. Go earn it.</p>
<</if>>
<</if>>
<<else>>
<p class="spy-narrative">There's no debt to manage right now.</p>
<</if>>
<div class="menu-buttons">
[[Leave->CarolHouse]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/brandi_house_preview.jpg" alt="Brandi's house">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.brandi.face" alt="Brandi"></div>
<div class="dialog-text brandi">
<<if $story.brandiDebtPath is "gang">>
It's... handled? You actually did it. You went to those people for me. I don't know whether to thank you or be terrified of what you'll want in return. Both, probably.
<<else>>
You really worked for every cent of that, didn't you. Nobody's ever — *nobody* has ever done something like this for me without a price tag. I don't know what to do with that.
<</if>>
</div>
</div>
<<silently>>
<<if $story.brandiDebtPath is "gang">>
<<set $openWorldGirls.brandi.corruption += 15>>
<<set $player.reputation.gang += 10>>
<<else>>
<<set $openWorldGirls.brandi.love += 20>>
<</if>>
<</silently>>
<p class="spy-narrative">Whatever Brandi was before, she is something different to you now. (This branch's deeper scenes hook in here.)</p>
<div class="menu-buttons">
[[Continue->CarolHouse]]
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 5) + 1>>
<<silently>>
<<set $openWorldGirls.brandi.dailyInteractions.flirt += 1>>
<<set $openWorldGirls.brandi.love += $openWorldGirls.brandi.interactions.flirt.stats.love>>
<<set $openWorldGirls.brandi.lust += $openWorldGirls.brandi.interactions.flirt.stats.lust>>
<<set $openWorldGirls.brandi.corruption += $openWorldGirls.brandi.interactions.flirt.stats.corruption>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
brandi: "Are you always this... persistent? It's almost cute. Almost.",
player: "Only for things that catch my eye."
},
{
brandi: "You have a certain... raw energy about you. It's so... unrefined. But not entirely unpleasant to look at.",
player: "I'll take that as a compliment."
},
{
brandi: "Don't get any ideas, boy. I eat little things like you for breakfast.",
player: "Breakfast is the most important meal of the day, isn't it?"
},
{
brandi: "You keep looking at me like that and you might just get what you're asking for. And you might not like it.",
player: "I'm willing to take that risk."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.brandi.face" alt="Brandi's Face">
</div>
<div class="dialog-text brandi">
<<= _randomDialogue.brandi >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/brandi/flirt/brandi_flirt_" + _randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
A flicker of interest crosses Brandi's face, quickly masked by her usual look of bored superiority. But her eyes linger on you a moment longer than necessary.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 6) + 1>>
<<silently>>
<<set $openWorldGirls.brandi.dailyInteractions.talk += 1>>
<<set $openWorldGirls.brandi.love += $openWorldGirls.brandi.interactions.talk.stats.love>>
<<set $openWorldGirls.brandi.lust += $openWorldGirls.brandi.interactions.talk.stats.lust>>
<<set $openWorldGirls.brandi.corruption += $openWorldGirls.brandi.interactions.talk.stats.corruption>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
brandi: "I was just about to do something important. What do you want?",
player: "Sorry to bother you, just wanted to say hi."
},
{
brandi: "Is there a point to you being here, or are you just... existing in my general vicinity?",
player: "Just enjoying the scenery, I guess."
},
{
brandi: "I have a thousand things on my mind. You wouldn't understand a single one.",
player: "You seem like you handle a lot. It's impressive."
},
{
brandi: "Oh, it's you again. My day was going so well.",
player: "Glad I could... add to it?"
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.brandi.face" alt="Brandi's Face">
</div>
<div class="dialog-text brandi">
<<= _randomDialogue.brandi >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/brandi/talk/brandi_talk_" + _randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Brandi regards you with a look of mild annoyance, barely pausing her current activity to acknowledge you.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">Brandi's Residence</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/brandi_house_preview.jpg" alt="Brandi's pristine and imposing house">
</div>
</div>
<p class="hub-description">
You stand before Brandi's house. It's an impeccable, almost sterile-looking modern home that screams "new money" and "judgment". The lawn is perfectly manicured, a stark contrast to the chaos brewing inside... or the chaos you plan to bring.
</p>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">
[[Living Room|LivingRoomBrandi]]
</div>
<img src="img/layout/brandi_house/livingroom.jpg" alt="Brandi's Living Room">
</div>
<div class="location-item">
<div class="location-overlay">
[[Kitchen|KitchenBrandi]]
</div>
<img src="img/layout/brandi_house/kitchen.jpg" alt="Brandi's Kitchen">
</div>
<div class="location-item">
<div class="location-overlay">
[[Bedroom|BedroomBrandi]]
</div>
<img src="img/layout/brandi_house/bedroom.jpg" alt="Brandi's Bedroom">
</div>
<div class="location-item">
<div class="location-overlay">
[[Guest Room|BedroomGuestBrandi]]
</div>
<img src="img/layout/brandi_house/guest_room.jpg" alt="Brandi's Guest Room">
</div>
<div class="location-item">
<div class="location-overlay">
[[Bathroom|BathroomBrandi]]
</div>
<img src="img/layout/brandi_house/bathroom.jpg" alt="Brandi's Bathroom">
</div>
<div class="location-item">
<div class="location-overlay">
[[Garden|GardenBrandi]]
</div>
<img src="img/layout/brandi_house/garden.jpg" alt="Brandi's Garden">
</div>
<div class="location-item">
<div class="location-overlay">
[[Pool Area|PoolBrandi]]
</div>
<img src="img/layout/brandi_house/pool.jpg" alt="Brandi's Pool">
</div>
<div class="location-item">
<div class="location-overlay">
[[Leave to Neighborhood|Neighborhood]]
</div>
<img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="Leave to Neighborhood">
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Work off Debt: Car Wash
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/garden.jpg" alt="Brandi's Luxurious Garage">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You head to Brandi's garage early in the morning, tools in hand, to wash her pristine luxury car as part of paying off your debt. She's there, stepping out of the driver's seat with the door open, dressed in a sleek outfit that shows off her figure. She eyes you impatiently, clearly not thrilled about supervising.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Finally. My car is filthy from that drive yesterday – bird droppings, mud, the works. Wash it properly: different messes need different tools. Use the wrong one, and you'll scratch the paint. I'll be watching... from a safe distance.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Understood. I'll make it shine. Where are the supplies?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Over there – hose, sponge, brush, cloth. Pay attention to what each spot needs. Screw up, and you start over. Now hop to it while I... relax.
</div>
</div>
<!-- Imagem da Brandi sentada no carro com a porta aberta -->
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/car/brandi_car_seat.jpg" alt="Brandi Exiting Car">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Brandi lounges against the car door, watching you with a smirk as you prepare to tackle the grime.
</p>
</div>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="car-wash-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: A Test of Discretion
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/dressed/brandi_open_bag.jpg" alt="Brandi Handing a Letter">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Evening air settles over the garden. Brandi opens her handbag and produces a sealed letter with an embossed crest. She doesn’t explain—she doesn’t need to. This is not a favor. It’s a test.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Get rid of this—quietly. No splashy mistakes. Your methods are your problem; my name stays clean. Impress me... or remind me why people need leverage.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Understood. No trail, no noise. You won’t hear about it again—unless you want a receipt.
</div>
</div>
<div class="game-challenge discretion-zone">
<div id="discretion-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: An Inside Job
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/dressed/brandi_dresses_living_room.jpg" alt="Brandi Living Room">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
As part of your growing debt, Brandi orders you to dust her living room. The space is immaculate—glass, velvet, and polished wood—just waiting to trap you with the wrong choice.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Good. Since you like being useful, you can start here. Different surfaces, different tools. If you scratch anything, we start over—and you owe me more time.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Got it. Cloth for glass, duster for shelves, vacuum for fabric. I’ll be careful.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Then prove it. Don’t make me breathe dust. I have a reputation to maintain.
</div>
</div>
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="dusting-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: The First Piece of Leverage
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/dressed/brandi_reading_magazine.jpg" alt="Brandi Reading Magazine">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You find Brandi lounging in her living room, flipping through a glossy magazine like the world answers to her schedule. Today, it doesn’t. You’ve heard enough to turn the tide—and you’re done playing servant.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Enough errands. We’re going to talk—about your situation. I know more than you think.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Cute. You finally found a backbone. You think you can leverage me in my own home? Try it—carefully.
</div>
</div>
<div class="game-challenge leverage-zone">
<div id="leverage-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Work off Debt: Pool Boy
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/pool.jpg" alt="Brandi's Luxurious Pool">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You arrive at Brandi's pool as instructed, ready to work off some of that statue debt. She's already there, stretching in a tight blue yoga outfit that hugs her curves perfectly – a short top and even shorter shorts that leave little to the imagination. The sun glistens off the water as she moves gracefully into poses, her body flexing in ways that make it hard to focus on the task at hand.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
About time you showed up. The pool needs cleaning – skim the leaves, scrub the edges, and don't miss a spot. I'll be right here doing my yoga routine. Try not to stare too much; it's unbecoming.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Got it. I'll get right on it. Just point me to the tools.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
The net and brush are over there. Different debris needs different effort – some you can skim lightly, others need a good scrub. Mess up, and you'll start over. Now get to work while I... stretch.
</div>
</div>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="pool-cleaning-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
<!-- ===== Carrossel HTML (Usando a base existente) ===== -->
<div id="carousel" class="carousel">
<img src="img/chars/brandi/yoga/yoga_pool_1.jpg" class="carousel-img active" alt="Brandi Yoga Pose 1">
<img src="img/chars/brandi/yoga/yoga_pool_2.jpg" class="carousel-img" alt="Brandi Yoga Pose 2">
<img src="img/chars/brandi/yoga/yoga_pool_3.jpg" class="carousel-img" alt="Brandi Yoga Pose 3">
<img src="img/chars/brandi/yoga/yoga_pool_4.jpg" class="carousel-img" alt="Brandi Yoga Pose 4">
<img src="img/chars/brandi/yoga/yoga_pool_5.jpg" class="carousel-img" alt="Brandi Yoga Pose 5">
<img src="img/chars/brandi/yoga/yoga_pool_6.jpg" class="carousel-img" alt="Brandi Yoga Pose 6">
<img src="img/chars/brandi/yoga/yoga_pool_7.jpg" class="carousel-img" alt="Brandi Yoga Pose 7">
<img src="img/chars/brandi/yoga/yoga_pool_8.jpg" class="carousel-img" alt="Brandi Yoga Pose 8">
<img src="img/chars/brandi/yoga/yoga_pool_9.jpg" class="carousel-img" alt="Brandi Yoga Pose 9">
<img src="img/chars/brandi/yoga/yoga_pool_10.jpg" class="carousel-img" alt="Brandi Yoga Pose 10">
</div>
<!-- Controles do Carrossel (Opcional, mas incluídos para manual se quiser) -->
<div class="carousel-controls">
<<link "◀ Previous">>
<<run window.carouselPrevious()>>
<</link>>
<<link "Next ▶">>
<<run window.carouselNext()>>
<</link>>
</div>
<!-- ===== Fim do Carrossel HTML ===== -->
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Find the Lady's Key
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/tease/brandi_nightwear.jpg" alt="Brandi in Nightwear, Worried">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Panic frays the edges of Brandi’s usual composure. Somewhere in this room, a tiny key slipped away—locking something she cannot afford to leave sealed. She fixes you with a tense look that says more than she’ll admit aloud.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Don’t stand there—find it. It’s a small gold key. I dropped it and now it’s… gone. The sooner you find it, the better for both of us. You have a few tries before I lose my patience.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I’ll sweep the room. Give me a minute—and try not to hover.
</div>
</div>
<div class="game-challenge keyhunt-zone">
<div id="keyhunt-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Event: Brandi's Garden Statue Accident
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/garden.jpg" alt="Brandi's Luxurious Garden">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You've been called over to Brandi's garden to help with some light cleaning – she mentioned something about "maintaining standards" while her regular staff is away. As you carefully rake the leaves near her prized statues, your foot catches on a loose stone. With a horrifying crash, one of her expensive imported statues topples over and shatters on the ground. Brandi comes rushing out, her eyes wide with shock.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
What on earth have you done?! That was my priceless Venetian marble statue! It was worth more than your entire existence! How could you be so clumsy?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Oh no, I'm so sorry! It was an accident – I tripped on that stone. I didn't mean to break it!
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
An accident? Do you have any idea how much that cost? My husband brought it back from Italy himself! You're going to pay for this – every single penny. And don't think you can just walk away!
</div>
</div>
<!-- Imagem da estátua quebrada -->
<div class="environment-container">
<div class="environment-image">
<img src="img/etc/others/broken_statue.jpg" alt="Broken Statue in Brandi's Garden">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
The statue lies in pieces on the manicured lawn, its elegant form reduced to rubble. Brandi's face twists in horror and fury as she surveys the damage.
</p>
</div>
<!-- Imagem full da Brandi surpresa (após a estátua quebrada, como pedido) -->
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/brandi/face/brandi_surprise_face.jpg" alt="Brandi Surprised">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I... I don't know what to say. How can I make this right? I'll do whatever it takes to fix this.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/brandi/face/brandi_face.jpg" alt="Brandi Face">
</div>
<div class="dialog-text brandi">
Oh, you will. Starting now, you're my personal errand boy until you've worked off every cent of that statue. And believe me, it won't be easy. Now get out of my sight before I call the authorities!
</div>
</div>
<p class="mission-narrative-focus" style="margin-top:20px; text-align:center;">
You've accidentally broken Brandi's expensive statue, putting you in her debt. This could lead to some... interesting opportunities to make amends.
</p>
<<silently>>
<<set $missions.BM001.status to 1>>
<<set $openWorldGirls.brandi.love -= 10>>
<</silently>>
<div class="menu-buttons" style="text-align:center; margin-top:20px;">
[[Return to Brandi's Garden->GardenBrandi]]
</div>
</div><<approachCharacter "openWorldGirls.brandi">><<silently>>
<<set _approach to [
"She's on the phone again. The same hushed, panicked tone. The same pacing back and forth across her ridiculous Persian rug. You linger in the doorway.",
"You step into her living room and she immediately covers the receiver with her hand. \"What. *What.* Can't you see I'm — \" She rolls her eyes and turns her back.",
"She glances up from her call as you walk in. Her face goes pale, then composed. She mouths 'OUT.' She doesn't actually mean it."
].random()>>
<<set _during to [
"She paces while she talks, deliberately turning her back to you so you can't read her face. But you can hear every word. She knows you can. She doesn't move out of earshot.",
"Her voice rises and falls. She's begging someone, then threatening them, then begging again. The fact that you're listening makes the whole thing more humiliating. Or more thrilling. Hard to say.",
"She presses her forehead against the window while she talks, and her reflection catches your eye. She holds eye contact in the glass. She doesn't look away."
].random()>>
<<set _outcome to [
"She hangs up and finally turns around. \"Are you *quite* finished eavesdropping?\" Her hands are trembling slightly. She crosses her arms to hide it.",
"She slams the phone down. \"Don't you have somewhere to be? *Anywhere?*\" Her makeup is starting to streak. She turns away again.",
"She drops the phone on the side table and exhales. \"Tea. Make me tea. And don't speak.\" She sinks into the armchair without looking at you."
].random()>>
<<set _video to $scenes["BS001"].replay.videos.random()>>
<<applyReplay "BS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/livingroom.jpg" alt="Brandi's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Brandi on the phone" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Show yourself out->LivingRoomBrandi]]
</div>
</div><<silently>>
<<set _approach to [
"She sees you walking up the drive and her shoulders go rigid. By the time you ring the bell, she's already at the door, lips pressed thin. \"Inside. Quickly.\"",
"\"Don't you ever knock?\" she snaps as you walk in. But she's already moving toward the kitchen to put the kettle on. The routine is setting in.",
"You let yourself in through the side gate and she's waiting on the patio. \"Living room,\" she says without looking at you. \"And take off your shoes.\""
].random()>>
<<set _during to [
"She makes you tea exactly the way she made it the first time. Servile. Deliberate. Hating every second. And every second she does it, the easier it gets to ask for the next thing.",
"She kneels to remove your shoes and you watch the muscle in her jaw work. She doesn't speak. She doesn't have to.",
"She fluffs the pillows, brings the throw, lights the fire. The hostess routine. The *new* hostess routine. She catches you watching and lifts her chin defiantly. \"Is that *all*?\""
].random()>>
<<set _outcome to [
"She stands up smoothly when you're done with her. \"Get out. I've earned my afternoon.\" Her voice is steel. Her hands are shaking. You leave.",
"She walks you to the door personally. \"Don't make this a *daily* habit,\" she hisses. But you both know it already is.",
"She doesn't say goodbye. She just turns and walks back into her kitchen. You let yourself out. She'll be waiting again next time."
].random()>>
<<set _video to $scenes["BS002"].replay.videos.random()>>
<<applyReplay "BS002">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/livingroom.jpg" alt="Brandi's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Brandi serving" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Walk out the front door->LivingRoomBrandi]]
</div>
</div><<silently>>
<<set _approach to [
"You find her in the garden again at dusk. She's pretending to deadhead the roses but her hands aren't moving. She's been waiting for you.",
"She doesn't look up when you come through the gate. \"You're late.\" She wasn't expecting you. She just had to say it.",
"She's standing very still among the hydrangeas. The shawl. The pale skin. She's never looked more like a portrait. Or more terrified."
].random()>>
<<set _during to [
"She lets you back her against the garden wall. The roses tear at her shawl. She doesn't push you off. She doesn't push you off at all.",
"Her breathing is shallow. Her fingertips brush yours, then grip. \"This isn't who I am,\" she whispers. You don't argue. Neither does she.",
"She rests her forehead against your collarbone for a long moment. The garden hums around you. Neither of you says anything."
].random()>>
<<set _outcome to [
"She steps back and straightens her hair. \"Don't come here again unannounced.\" But she doesn't say *don't come*. Just *don't be unannounced*.",
"She squeezes your wrist and lets go. \"Tomorrow my husband flies in. So this... we pause this. Understand?\" You understand.",
"She walks back to the patio without looking at you. She's already composing herself. She's good at that. She's had practice."
].random()>>
<<set _video to $scenes["BS003"].replay.videos.random()>>
<<applyReplay "BS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/garden.jpg" alt="Brandi's Garden">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Brandi at the garden" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip back through the gate->GardenBrandi]]
</div>
</div><<silently>>
<<set _approach to [
"You spot her in her usual booth. She looks worse than last time — same dress, three more drinks. She lifts her glass at you without smiling.",
"She sees you across the bar and looks away too quickly. You sit down anyway. \"Buy me another. *Please.*\" The 'please' is new.",
"She's already at the bar when you arrive. Top three buttons undone, eyes glassy. The bartender shoots you a look. You sit down anyway."
].random()>>
<<set _during to [
"She talks too fast tonight. Stories about her parents, her ex-husband, her trainer. None of them happy. You let her talk. She holds your hand under the bar.",
"She cries a little. Not loudly. Just one tear that she catches with the back of her hand. \"Don't *look* at me like that.\"",
"She leans against your shoulder. The bartender pretends not to notice. Her fingers thread through yours. She doesn't let go for the rest of the night."
].random()>>
<<set _outcome to [
"She straightens up suddenly and laughs. \"What am I doing? Get me a cab. I'm done.\" She kisses your cheek before she leaves.",
"She finishes her glass, sets it down, and exhales. \"Don't tell anyone you saw me like this. *Especially* not Carol.\"",
"She pays the tab. \"You didn't see this. Got it?\" She walks out without waiting for a reply."
].random()>>
<<set _video to $scenes["BS004"].replay.videos.random()>>
<<applyReplay "BS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/bar_chic.jpg" alt="Bar Gilded Lily">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Brandi at the bar" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Settle the tab->BarGildedLily]]
</div>
</div><<silently>>
<<set _approach to [
"She opens the bedroom door before you even knock. \"Get in. Quickly.\" She locks it behind you and won't meet your eyes.",
"She's sitting on the edge of her bed when you walk in. \"Two minutes. That's all you get. Hurry up.\"",
"She's waiting for you. Hair down. Bathrobe. Hands folded in her lap like a girl waiting for a punishment. \"Let's get this over with.\""
].random()>>
<<set _during to [
"Her hands work you mechanically. She doesn't look at your face. She looks at the ceiling. She breathes through her nose. The sheet sound. The hand sound. Nothing else.",
"Her grip is tighter than it needs to be. She wants this over with. She wants this never to be over with. You can't tell which.",
"She breaks her own rule and looks at your face for one second. Her eyes are wet. She doesn't say anything. Her hand keeps moving."
].random()>>
<<set _outcome to [
"She wipes her hands on the towel she pre-folded next to the bed. \"Out. Now. Don't come back this week.\" But she will. You both know she will.",
"She gets up, ties her robe, and gestures to the door. \"Out.\" She's already moving to the bathroom by the time you reach the hallway.",
"She lies back on the bed and stares at the ceiling. \"You can let yourself out.\" She doesn't move for the next ten minutes."
].random()>>
<<set _video to $scenes["BS005"].replay.videos.random()>>
<<applyReplay "BS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/bedroom.jpg" alt="Brandi's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Let yourself out->BedroomBrandi]]
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="blackmail-handjob-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="letter-disposed-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="overheard-call-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="power-shift-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="vulnerable-at-bar-scene-content"></div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Trail Collision</p>
<p class="mission-narrative-focus">You came to run. Dirt path, morning air, then someone in a black crop filling the trail who does not yield.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Whoa— sorry. I didn't see you.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.parkGirl.face" alt="Carmen"></div>
<div class="dialog-text carmen">You almost took me out. Don't just stand there breathing on me unless you're going to do something about it.</div>
</div>
<p class="spy-narrative">The moment should be an apology. It is not. The tape that follows does not bother with a second hello.</p>
<div class="menu-buttons">
<<link "Don't step back">>
<<set $randomEncounters.parkGirl.missions.trailRun.status to 1>>
<<run window.AWAC.applyReward({ lust: 4 })>>
<<goto "CarmenTrailHookup">>
<</link>>
<<link "Keep running">><<goto "ParkTrail">><</link>>
</div>
</div><div class="game-container spy-scene-container">
<div id="carmen-trail-content"></div>
</div><<approachCharacter "randomEncounters.parkGirl">><<silently>>
<<set _approach to [
"Same trail. Same crop. She doesn't slow down until she is close enough to hit you again.",
"She jogs in place, grinning. \"You or the dirt. Pick.\"",
"No hello. She catches your shirt and pulls you off the packed path."
].random()>>
<<set _during to [
"It is still morning. It is still public. She does not care.",
"Dirt, breath, her shorts around her ankles like the run was never the point.",
"The mountains do not look away. Neither do you."
].random()>>
<<set _outcome to [
"She tugs her shorts up and starts jogging like nothing happened.",
"\"Don't wave. I'll see you if I see you.\"",
"You are still catching your breath. She is already gone around the bend."
].random()>>
<<set _video to $scenes["HS001"].replay.videos.random()>>
<<applyReplay "HS001">>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Carmen" style="max-width: 640px; border-radius: 8px;">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the trail->ParkTrail]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Just checking the bathroom... Need to make sure I don't barge in on anyone.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom">
</div>
<p class="environment-text">The bathroom is clean and smells faintly of soap and maybe Aunt Carol's perfume. A damp towel hangs over the shower rail.</p>
</div>
<<if ($auntCarol.locationSchedule.Bathroom.start <= $auntCarol.locationSchedule.Bathroom.end and $time >= $auntCarol.locationSchedule.Bathroom.start and $time <= $auntCarol.locationSchedule.Bathroom.end)
or ($auntCarol.locationSchedule.Bathroom.start > $auntCarol.locationSchedule.Bathroom.end and ($time >= $auntCarol.locationSchedule.Bathroom.start or $time <= $auntCarol.locationSchedule.Bathroom.end))>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_surprised.jpg" alt="Aunt Carol Surprised Face">
</div>
<div class="dialog-text carol">
Oh! Hey! Didn't hear you come in. Just finishing up in here. Need something?
</div>
</div>
<</if>>
<<if State.hasPlayed("Bathroom")>>
<div class="mission-list">
<h3>Available Missions</h3>
<<set _missionCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _mission range $missions>>
<<if _mission.location is "Bathroom" and _mission.status is 0 and _mission.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _mission.period is "string">>
<<if _mission.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_mission.period)>>
<<if _mission.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _mission.period is 'undefined' or _mission.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _mission.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _mission.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_mission.requirements.item)>>
<<elseif _mission.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _mission.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _missionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<link _mission.name _mission.passage>>
<span class="mission_name"><<print _mission.name>></span>
<</link>>
<<set _missionCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _missionCount is 0>>
<p>There are no missions available for now.</p>
<</if>>
</div>
<div class="scene-list">
<h3>Available Scenes</h3>
<<set _sceneCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _scene range $scenes>>
<<if _scene.location is "Bathroom" and _scene.status is 0 and _scene.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _scene.period is "string">>
<<if _scene.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_scene.period)>>
<<if _scene.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _scene.period is 'undefined' or _scene.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _scene.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _scene.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_scene.requirements.item)>>
<<elseif _scene.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _scene.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _sceneCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _sceneName to _scene.name || (_id.charAt(0).toUpperCase() + _id.slice(1)).replace(/([a-z])([A-Z])/g, '$1 $2')>>
<<link _sceneName _scene.passage>>
<span class="scene_name"><<print _sceneName>></span>
<</link>>
<<set _sceneCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _sceneCount is 0>>
<p>There are no scenes available for now.</p>
<</if>>
</div>
<div class="interaction-list">
<h3>Available Interactions</h3>
<<set _interactionCount to 0>>
<<for _type, _interaction range $auntCarol.interactions>>
<<if ($auntCarol.locationSchedule.Bathroom.start <= $auntCarol.locationSchedule.Bathroom.end and $time >= $auntCarol.locationSchedule.Bathroom.start and $time <= $auntCarol.locationSchedule.Bathroom.end)
or ($auntCarol.locationSchedule.Bathroom.start > $auntCarol.locationSchedule.Bathroom.end and ($time >= $auntCarol.locationSchedule.Bathroom.start or $time <= $auntCarol.locationSchedule.Bathroom.end))>>
<<if _interaction.limit > $auntCarol.dailyInteractions[_type]>>
<<if _interactionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _capitalized = _type.charAt(0).toUpperCase() + _type.slice(1)>>
<<link _capitalized _interaction.passage>>
<span class="interaction_name"><<print _capitalized>></span>
<</link>>
<<set _interactionCount += 1>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _interactionCount is 0>>
<p>There are no interactions available for now.</p>
<</if>>
</div>
<<else>>
<p>Just the bathroom. Seems unoccupied for now.</p>
<<set State.track("Bathroom")>>
<</if>>
<div class="menu-buttons">
[[Leave Bathroom->CarolHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Your temporary room... not much, but it's comfortable enough.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_messy_small.png" alt="Guest Bedroom">
</div>
<!-- Texto do ambiente modificado para remover menção ao computador -->
<p class="environment-text">A cozy guest room with a neatly made bed, a small desk, and a window letting in the morning light. Seems like a good place to rest or just pass some time.</p>
</div>
<<if $keyEvents.openWorldCarolCity && not $keyEvents.mondayBriefingSeen>>
<<set $keyEvents.mondayBriefingSeen to true>>
<div class="mission-task-container" style="border-color: rgba(212, 175, 55, 0.4); background: rgba(20, 16, 26, 0.9); margin-bottom: 15px;">
<h4 style="color: #ffd700; margin: 0 0 6px 0; font-family: var(--font-heading, 'Cinzel', serif);">A New Routine: Your Life in the City Begins</h4>
<p class="spy-narrative" style="margin: 0; font-size: 0.88rem; color: #dfc06a;">
The weekend visit is officially over — you're a resident here now. Start by unpacking your things right here in the bedroom, boot up Carol's old laptop to check objectives and local leads, and head down to the kitchen to see how Aunt Carol's morning is going.
</p>
</div>
<</if>>
<<if State.hasPlayed("Bedroom")>>
<div class="mission-list">
<h3>Available Missions</h3>
<<set _missionCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _mission range $missions>>
<<if _mission.location is "Bedroom" and _mission.status is 0 and _mission.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _mission.period is "string">>
<<if _mission.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_mission.period)>>
<<if _mission.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _mission.period is 'undefined' or _mission.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _mission.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _mission.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_mission.requirements.item)>>
<<elseif _mission.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _mission.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _missionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<link _mission.name _mission.passage>>
<span class="mission_name"><<print _mission.name>></span>
<</link>>
<<set _missionCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _missionCount is 0>> <p>There are no missions available for now.</p> <</if>>
</div>
<div class="scene-list">
<h3>Available Scenes</h3>
<<set _sceneCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _scene range $scenes>>
<<if _scene.location is "Bedroom" and _scene.status is 0 and _scene.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _scene.period is "string">>
<<if _scene.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_scene.period)>>
<<if _scene.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _scene.period is 'undefined' or _scene.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _scene.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _scene.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_scene.requirements.item)>>
<<elseif _scene.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _scene.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _sceneCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _sceneName to _scene.name || (_id.charAt(0).toUpperCase() + _id.slice(1)).replace(/([a-z])([A-Z])/g, '$1 $2')>>
<<link _sceneName _scene.passage>>
<span class="scene_name"><<print _sceneName>></span>
<</link>>
<<set _sceneCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _sceneCount is 0>> <p>There are no scenes available for now.</p> <</if>>
</div>
<div class="interaction-list">
<h3>Available Interactions</h3>
<<set _interactionCount to 0>>
<<if $player.interactions and Object.keys($player.interactions).length > 0>>
<<for _type, _interaction range $player.interactions>>
<<if _interaction.limit > ($player.dailyInteractions[_type] or 0)>>
<<if _interactionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _capitalized = _type.charAt(0).toUpperCase() + _type.slice(1)>>
<<link _capitalized _interaction.passage>>
<span class="interaction_name"><<print _capitalized>></span>
<</link>>
<<set _interactionCount += 1>>
<</if>>
<</if>>
<</for>>
<<if _interactionCount is 0>> <p>There are no interactions available for now.</p> <</if>>
<<else>>
<p>There are no interactions available for now.</p>
<</if>>
</div>
<<else>>
<p>It's your room for now. Make yourself at home.</p>
<<set State.track("Bedroom")>>
<</if>>
<div class="exclusive-actions">
<h3>Exclusive Actions</h3>
<div class="actions-container">
<!-- Botão Sleep com condição de tempo -->
<<if $time >= 21 || $time < 6 >> <!-- Permite dormir a partir das 21h até antes das 6h -->
<<link "Rest for the night" "SleepSequence">><</link>>
<<else>>
<span class="action-button disabled" title="It's too early to go to bed. Wait until at least 9 PM (21:00).">Rest for the night (Too Early)</span>
<</if>>
/* Old Computer link retired in favor of OldLaptop */
<!-- Laptop / Notebook hub (v0.6) -->
<<if $player.inventory.includes("OldLaptop")>>
<<link "Use Laptop (Notebook)" "Notebook">><</link>>
<<else>>
<span class="action-button disabled" title="The old laptop isn't here right now.">Use Computer (Unavailable)</span>
<</if>>
<<link `"Pass some time (Time: " + $time + ":00)"` `passage()`>>
<<run window.AWAC.advanceTime(1)>>
<</link>>
</div>
<!-- Mensagem se for muito cedo para dormir -->
<<if $time < 21 && $time >= 6>>
<p style="text-align:center; color:#F1C40F; margin-top:15px; font-style:italic;">It's still too early to go to bed. Maybe explore a bit more or wait?</p>
<</if>>
</div>
<div class="menu-buttons">
[[Leave the room->CarolHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Stepping into Aunt Carol's bedroom feels oddly personal... I should be careful about what I do here.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Bedroom Carol">
</div>
<p class="environment-text">The room is neatly arranged, with a soft scent of lavender lingering in the air. The bed looks inviting, and there's a small vanity by the window.</p>
</div>
<<if ($auntCarol.locationSchedule.BedroomCarol.start <= $auntCarol.locationSchedule.BedroomCarol.end and $time >= $auntCarol.locationSchedule.BedroomCarol.start and $time <= $auntCarol.locationSchedule.BedroomCarol.end)
or ($auntCarol.locationSchedule.BedroomCarol.start > $auntCarol.locationSchedule.BedroomCarol.end and ($time >= $auntCarol.locationSchedule.BedroomCarol.start or $time <= $auntCarol.locationSchedule.BedroomCarol.end))>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Aunt Carol Face">
</div>
<div class="dialog-text carol">
Oh? You’re in my room... Did you need something?
</div>
</div>
<</if>>
<<if State.hasPlayed("BedroomCarol")>>
<div class="mission-list">
<h3>Available Missions</h3>
<<set _missionCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _mission range $missions>>
<<if _mission.location is "BedroomCarol" and _mission.status is 0 and _mission.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _mission.period is "string">>
<<if _mission.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<elseif Array.isArray(_mission.period)>>
<<if _mission.period.includes(_currentPeriodName)>>
<<set _periodMatch to true>>
<</if>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _mission.requirements.type is "none">>
<<set _reqMet to true>>
<<elseif _mission.requirements.type is "mission">>
<<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "scene">>
<<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "item">>
<<set _reqMet to $player.inventory.includes(_mission.requirements.item)>>
<<elseif _mission.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _mission.requirements>>
<<if _stat is not "type">>
<<if $player[_stat] < _value>>
<<set _reqMet to false>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _missionCount < 3>>
<<set _display to true>>
<<else>>
<<set _display to false>>
<</if>>
<<if _display>>
<<link _mission.name _mission.passage>>
<span class="mission_name"><<print _mission.name>></span>
<</link>>
<<set _missionCount to _missionCount + 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _missionCount is 0>>
<p>There are no missions available for now.</p>
<</if>>
</div>
<div class="scene-list">
<h3>Available Scenes</h3>
<<set _sceneCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _scene range $scenes>>
<<if _scene.location is "BedroomCarol" and _scene.status is 0 and _scene.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _scene.period is "string">>
<<if _scene.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<elseif Array.isArray(_scene.period)>>
<<if _scene.period.includes(_currentPeriodName)>>
<<set _periodMatch to true>>
<</if>>
<</if>>
<<if _periodMatch>> /* Adicionado: Verifica se o período bate */
<<set _reqMet to false>>
<<if _scene.requirements.type is "none">>
<<set _reqMet to true>>
<<elseif _scene.requirements.type is "mission">>
<<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "scene">>
<<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "item">>
<<set _reqMet to $player.inventory.includes(_scene.requirements.item)>>
<<elseif _scene.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _scene.requirements>>
<<if _stat is not "type">>
<<if $player[_stat] < _value>>
<<set _reqMet to false>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _sceneCount < 3>>
<<set _display to true>>
<<else>>
<<set _display to false>>
<</if>>
<<if _display>>
<<set _sceneName to _scene.name || (_id.charAt(0).toUpperCase() + _id.slice(1)).replace(/([a-z])([A-Z])/g, '$1 $2')>>
<<link _sceneName _scene.passage>>
<span class="scene_name"><<print _sceneName>></span>
<</link>>
<<set _sceneCount to _sceneCount + 1>>
<</if>>
<</if>>
<</if>> /* Fim do if _periodMatch */
<</if>>
<</for>>
<<if _sceneCount is 0>>
<p>There are no scenes available for now.</p>
<</if>>
</div>
<div class="interaction-list">
<h3>Available Interactions</h3>
<<set _interactionCount to 0>>
<<for _type, _interaction range $auntCarol.interactions>>
<<if ($auntCarol.locationSchedule.BedroomCarol.start <= $auntCarol.locationSchedule.BedroomCarol.end and $time >= $auntCarol.locationSchedule.BedroomCarol.start and $time <= $auntCarol.locationSchedule.BedroomCarol.end)
or ($auntCarol.locationSchedule.BedroomCarol.start > $auntCarol.locationSchedule.BedroomCarol.end and ($time >= $auntCarol.locationSchedule.BedroomCarol.start or $time <= $auntCarol.locationSchedule.BedroomCarol.end))>>
<<if _interaction.limit > $auntCarol.dailyInteractions[_type]>>
<<if _interactionCount < 3>>
<<set _display to true>>
<<else>>
<<set _display to false>>
<</if>>
<<if _display>>
<<set _capitalized = _type.charAt(0).toUpperCase() + _type.slice(1)>>
<<link _capitalized _interaction.passage>>
<span class="interaction_name"><<print _capitalized>></span>
<</link>>
<<set _interactionCount to _interactionCount + 1>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _interactionCount is 0>>
<p>There are no interactions available for now.</p>
<</if>>
</div>
<<else>>
<p>Standing in Aunt Carol's bedroom, I wonder if there's anything worth doing here...</p>
<<set State.track("BedroomCarol")>>
<</if>>
<div class="menu-buttons">
[[Leave the Carol's room->CarolHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The guest room. I wonder if anyone ever actually stays here. It's as pristine as the rest of the house.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/brandi_house/guest_room.jpg" alt="Brandi's untouched guest room">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BedroomGuestBrandi">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The guest room is empty right now. Just pristine stillness.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Guest Room->BrandiHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) The sweet smell of something cooking is calling to you... Now that you're awake, you should go see what Carol's preparing.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="Kitchen">
</div>
<p class="environment-text">The kitchen is warm and inviting, sun streaming through the windows. You can make out the day with birds singing!</p>
</div>
<<if ($auntCarol.locationSchedule.Kitchen.start <= $auntCarol.locationSchedule.Kitchen.end and $time >= $auntCarol.locationSchedule.Kitchen.start and $time <= $auntCarol.locationSchedule.Kitchen.end)
or ($auntCarol.locationSchedule.Kitchen.start > $auntCarol.locationSchedule.Kitchen.end and ($time >= $auntCarol.locationSchedule.Kitchen.start or $time <= $auntCarol.locationSchedule.Kitchen.end))>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Aunt Carol Face">
</div>
<div class="dialog-text carol">
Good morning! Did you sleep well? Is there anything I can help you with?
</div>
</div>
<</if>>
<<if State.hasPlayed("Kitchen")>>
<div class="mission-list">
<h3>Available Missions</h3>
<<set _missionCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _mission range $missions>>
<<if _mission.location is "Kitchen" and _mission.status is 0 and _mission.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _mission.period is "string">>
<<if _mission.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_mission.period)>>
<<if _mission.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _mission.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _mission.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_mission.requirements.item)>>
<<elseif _mission.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _mission.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _missionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<link _mission.name _mission.passage>>
<span class="mission_name"><<print _mission.name>></span>
<</link>>
<<set _missionCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _missionCount is 0>>
<p>There are no missions available for now.</p>
<</if>>
</div>
<div class="scene-list">
<h3>Available Scenes</h3>
<<set _sceneCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _scene range $scenes>>
<<if _scene.location is "Kitchen" and _scene.status is 0 and _scene.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _scene.period is "string">>
<<if _scene.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_scene.period)>>
<<if _scene.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _scene.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _scene.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_scene.requirements.item)>>
<<elseif _scene.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _scene.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _sceneCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _sceneName to _scene.name || (_id.charAt(0).toUpperCase() + _id.slice(1)).replace(/([a-z])([A-Z])/g, '$1 $2')>>
<<link _sceneName _scene.passage>>
<span class="scene_name"><<print _sceneName>></span>
<</link>>
<<set _sceneCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _sceneCount is 0>>
<p>There are no scenes available for now.</p>
<</if>>
</div>
<div class="interaction-list">
<h3>Available Interactions</h3>
<<set _interactionCount to 0>>
<<for _type, _interaction range $auntCarol.interactions>>
<<if ($auntCarol.locationSchedule.Kitchen.start <= $auntCarol.locationSchedule.Kitchen.end and $time >= $auntCarol.locationSchedule.Kitchen.start and $time <= $auntCarol.locationSchedule.Kitchen.end)
or ($auntCarol.locationSchedule.Kitchen.start > $auntCarol.locationSchedule.Kitchen.end and ($time >= $auntCarol.locationSchedule.Kitchen.start or $time <= $auntCarol.locationSchedule.Kitchen.end))>>
<<if _interaction.limit > $auntCarol.dailyInteractions[_type]>>
<<if _interactionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _capitalized = _type.charAt(0).toUpperCase() + _type.slice(1)>>
<<link _capitalized _interaction.passage>>
<span class="interaction_name"><<print _capitalized>></span>
<</link>>
<<set _interactionCount += 1>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _interactionCount is 0>>
<p>There are no interactions available for now.</p>
<</if>>
</div>
<<else>>
<p>Welcome to the kitchen, let's find what to do here.</p>
<<set State.track("Kitchen")>>
<</if>>
<<if $kitchenFeedback>>
<div class="mission-task-container" style="margin-top: var(--sp-3);">
<p class="spy-narrative"><<= $kitchenFeedback>></p>
</div>
<<set $kitchenFeedback to null>>
<</if>>
<<if $keyEvents.openWorldCarolCity>>
<div class="actions-container" style="margin-top: 15px;">
<<link "Pitch in for Household Groceries ($40)">>
<<if $player.money < 40>>
<<set $kitchenFeedback to "You don't have $40 in cash to contribute to the household groceries.">>
<<elseif $keyEvents.groceriesPaidDay and ($dayNumber - $keyEvents.groceriesPaidDay < 3)>>
<<set $kitchenFeedback to "Carol smiles warmly: \"Sweetie, you just helped stock the pantry a couple days ago! Don't spend all your hard-earned money on me.\"" >>
<<else>>
<<run window.AWAC.spend(40)>>
<<set $keyEvents.groceriesPaidDay to $dayNumber>>
<<set $auntCarol.love to Math.min(100, $auntCarol.love + 4)>>
<<set $auntCarol.caring to Math.min(100, $auntCarol.caring + 8)>>
<<set $kitchenFeedback to "You leave $40 on the kitchen counter for groceries. Carol hugs you tight from behind, visibly touched by your responsibility and thoughtfulness. (-$40, +4 Carol Love, +8 Carol Caring)">>
<</if>>
<<goto "Kitchen">>
<</link>>
</div>
<</if>>
<div class="menu-buttons">
[[Leave The Kitchen->CarolHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The comforting warmth of the living room beckons me... Time to relax and see what awaits.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="environment-text">The living room is cozy and inviting, with soft lighting and comfortable seating. A peaceful ambiance fills the space.</p>
</div>
<<if ($auntCarol.locationSchedule.LivingRoom.start <= $auntCarol.locationSchedule.LivingRoom.end and $time >= $auntCarol.locationSchedule.LivingRoom.start and $time <= $auntCarol.locationSchedule.LivingRoom.end)
or ($auntCarol.locationSchedule.LivingRoom.start > $auntCarol.locationSchedule.LivingRoom.end and ($time >= $auntCarol.locationSchedule.LivingRoom.start or $time <= $auntCarol.locationSchedule.LivingRoom.end))>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Aunt Carol Face">
</div>
<div class="dialog-text carol">
Good day! It's great to see you. Is there anything special you'd like to do today?
</div>
</div>
<</if>>
<<if State.hasPlayed("LivingRoom")>>
<div class="mission-list">
<h3>Available Missions</h3>
<<set _missionCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _mission range $missions>>
<<if _mission.location is "LivingRoom" and _mission.status is 0 and _mission.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _mission.period is "string">>
<<if _mission.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_mission.period)>>
<<if _mission.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _mission.period is 'undefined' or _mission.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _mission.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _mission.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_mission.requirements.item)>>
<<elseif _mission.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _mission.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _missionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<link _mission.name _mission.passage>>
<span class="mission_name"><<print _mission.name>></span>
<</link>>
<<set _missionCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _missionCount is 0>>
<p>There are no missions available for now.</p>
<</if>>
</div>
<div class="scene-list">
<h3>Available Scenes</h3>
<<set _sceneCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _scene range $scenes>>
<<if _scene.location is "LivingRoom" and _scene.status is 0 and _scene.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _scene.period is "string">>
<<if _scene.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_scene.period)>>
<<if _scene.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _scene.period is 'undefined' or _scene.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _scene.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _scene.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_scene.requirements.item)>>
<<elseif _scene.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _scene.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _sceneCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _sceneName to _scene.name || (_id.charAt(0).toUpperCase() + _id.slice(1)).replace(/([a-z])([A-Z])/g, '$1 $2')>>
<<link _sceneName _scene.passage>>
<span class="scene_name"><<print _sceneName>></span>
<</link>>
<<set _sceneCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _sceneCount is 0>>
<p>There are no scenes available for now.</p>
<</if>>
</div>
<div class="interaction-list">
<h3>Available Interactions</h3>
<<set _interactionCount to 0>>
<<for _type, _interaction range $auntCarol.interactions>>
<<if ($auntCarol.locationSchedule.LivingRoom.start <= $auntCarol.locationSchedule.LivingRoom.end and $time >= $auntCarol.locationSchedule.LivingRoom.start and $time <= $auntCarol.locationSchedule.LivingRoom.end)
or ($auntCarol.locationSchedule.LivingRoom.start > $auntCarol.locationSchedule.LivingRoom.end and ($time >= $auntCarol.locationSchedule.LivingRoom.start or $time <= $auntCarol.locationSchedule.LivingRoom.end))>>
<<if _interaction.limit > $auntCarol.dailyInteractions[_type]>>
<<if _interactionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _capitalized = _type.charAt(0).toUpperCase() + _type.slice(1)>>
<<link _capitalized _interaction.passage>>
<span class="interaction_name"><<print _capitalized>></span>
<</link>>
<<set _interactionCount += 1>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _interactionCount is 0>>
<p>There are no interactions available for now.</p>
<</if>>
</div>
<<else>>
<p>Welcome to the living room, let's find what to do here.</p>
<<set State.track("LivingRoom")>>
<</if>>
<div class="menu-buttons">
[[Leave The Living Room->CarolHouse]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">Outside Carol's House</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Front of Aunt Carol's House">
</div>
</div>
<p class="hub-description">
You stand in front of the house, the sun on your face. The neighborhood is quiet, almost deceptively so. From here, the entire city is yours to explore, each district holding its own promises and perils. Where will you go?
</p>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">
[[The Neighborhood|Neighborhood]]
</div>
<img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="The Neighborhood">
</div>
<div class="location-item">
<div class="location-overlay">
[[The Park|Park]]
</div>
<img src="img/layout/park/park_preview.jpg" alt="The Park">
</div>
<div class="location-item">
<div class="location-overlay">
[[The City Center|CityCenter]]
</div>
<img src="img/layout/city/city_center_preview.jpg" alt="The City Center">
</div>
<div class="location-item">
<div class="location-overlay" style="background-color: rgba(120, 20, 20, 0.6);"> <!-- Overlay vermelho de aviso -->
[[The Outskirts|Outskirts]]
</div>
<img src="img/layout/outskirts/outskirts_preview.jpg" alt="The Outskirts"> <!-- Imagem com vibe mais sombria -->
</div>
<div class="location-item">
<div class="location-overlay">
[[Go Back Inside|CarolHouse]]
</div>
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Go Back Inside">
</div>
</div>
<!-- SEÇÃO DE EVENTOS PARA A ÁREA 'OUTSIDE' -->
<<silently>>
/* Este espaço está pronto para sua lógica de eventos que ocorrem na rua em frente à casa da Carol.
Você pode adaptar o código de eventos da CarolHouse para verificar _event.location is "Outside" */
<<set _availableEventsArrayOutside to []>>
/* Exemplo:
<<for _eventId, _event range $events>>
<<if _event.location is "Outside" and _event.status === 0 and etc...>>
<<run _availableEventsArrayOutside.push(_event)>>
<</if>>
<</for>>
*/
<</silently>>
<<if _availableEventsArrayOutside && _availableEventsArrayOutside.length > 0>>
<div class="hub-event-list-container">
<h3>! What's Happening Here? !</h3>
<!-- Loop para exibir eventos de 'Outside' aqui -->
</div>
<</if>>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The sun glistens on the water's surface... A perfect place to relax or maybe even have some fun.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_small.jpg" alt="Pool">
</div>
<p class="environment-text">The pool area is refreshing and peaceful. The water looks cool and inviting, with a few lounge chairs positioned under the shade.</p>
</div>
<<if ($auntCarol.locationSchedule.Pool.start <= $auntCarol.locationSchedule.Pool.end and $time >= $auntCarol.locationSchedule.Pool.start and $time <= $auntCarol.locationSchedule.Pool.end)
or ($auntCarol.locationSchedule.Pool.start > $auntCarol.locationSchedule.Pool.end and ($time >= $auntCarol.locationSchedule.Pool.start or $time <= $auntCarol.locationSchedule.Pool.end))>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Aunt Carol Face">
</div>
<div class="dialog-text carol">
The water is just perfect today. Are you going for a swim?
</div>
</div>
<</if>>
<<if State.hasPlayed("Pool")>>
<div class="mission-list">
<h3>Available Missions</h3>
<<set _missionCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _mission range $missions>>
<<if _mission.location is "Pool" and _mission.status is 0 and _mission.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _mission.period is "string">>
<<if _mission.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_mission.period)>>
<<if _mission.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _mission.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _mission.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_mission.requirements.item)>>
<<elseif _mission.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _mission.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _missionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<link _mission.name _mission.passage>>
<span class="mission_name"><<print _mission.name>></span>
<</link>>
<<set _missionCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _missionCount is 0>>
<p>There are no missions available for now.</p>
<</if>>
</div>
<div class="scene-list">
<h3>Available Scenes</h3>
<<set _sceneCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _scene range $scenes>>
<<if _scene.location is "Pool" and _scene.status is 0 and _scene.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _scene.period is "string">>
<<if _scene.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_scene.period)>>
<<if _scene.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _scene.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _scene.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_scene.requirements.item)>>
<<elseif _scene.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _scene.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _sceneCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _sceneName to _scene.name || (_id.charAt(0).toUpperCase() + _id.slice(1)).replace(/([a-z])([A-Z])/g, '$1 $2')>>
<<link _sceneName _scene.passage>>
<span class="scene_name"><<print _sceneName>></span>
<</link>>
<<set _sceneCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _sceneCount is 0>>
<p>There are no scenes available for now.</p>
<</if>>
</div>
<div class="interaction-list">
<h3>Available Interactions</h3>
<<set _interactionCount to 0>>
<<for _type, _interaction range $auntCarol.interactions>> /* CORRIGIDO: Usa auntCarol */
<<if ($auntCarol.locationSchedule.Pool.start <= $auntCarol.locationSchedule.Pool.end and $time >= $auntCarol.locationSchedule.Pool.start and $time <= $auntCarol.locationSchedule.Pool.end) /* CORRIGIDO: Usa locationSchedule de Carol na Pool */
or ($auntCarol.locationSchedule.Pool.start > $auntCarol.locationSchedule.Pool.end and ($time >= $auntCarol.locationSchedule.Pool.start or $time <= $auntCarol.locationSchedule.Pool.end))>>
<<if _interaction.limit > $auntCarol.dailyInteractions[_type]>> /* CORRIGIDO: Usa dailyInteractions de Carol */
<<if _interactionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _capitalized = _type.charAt(0).toUpperCase() + _type.slice(1)>>
<<link _capitalized _interaction.passage>>
<span class="interaction_name"><<print _capitalized>></span>
<</link>>
<<set _interactionCount += 1>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _interactionCount is 0>>
<p>There are no interactions available for now.</p>
<</if>>
</div>
<<else>>
<p>Standing by the pool, I wonder what to do next.</p>
<<set State.track("Pool")>>
<</if>>
<div class="menu-buttons">
[[Leave the pool area->CarolHouse]]
</div>
</div><<set $randomNumber to Math.floor(Math.random() * 8) + 1>> <!-- Número aleatório 1-8 -->
<<set $auntCarol.dailyInteractions.flirt to $auntCarol.dailyInteractions.flirt + 1>>
<<set $auntCarol.love to $auntCarol.love + $auntCarol.interactions.flirt.stats.love>>
<<set $auntCarol.lust to $auntCarol.lust + $auntCarol.interactions.flirt.stats.lust>>
<div class="game-container">
<<set _dialogueOptions to [
{
carol: "You know, I've been noticing how much you've... filled out since I last saw you. It's a *good* look on you.",
player: "(Blushing) Aunt Carol! You can't just say things like that."
},
{
carol: "Is it getting hot in here, or is it just you standing so close? Maybe we should cool off... together?",
player: "I... uh... I hadn't really noticed the temperature."
},
{
carol: "Tell me, what's the naughtiest thought that's crossed your mind since you arrived? Don't be shy, I can handle it.",
player: "I... I couldn't possibly say."
},
{
carol: "I've always thought you had such kissable lips. Have you ever been told that before, or am I the first?",
player: "(Swallowing hard) Well, no one quite as... direct as you, Aunt Carol."
},
{
carol: "You have this look in your eyes... like you're thinking about something you shouldn't. Am I right? Go on, tell your Aunt Carol all about it...",
player: "Maybe... maybe I am thinking a few things."
}
]>>
<<set $randomDialogue to _dialogueOptions.random()>> <!-- Variável corrigida para $ -->
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
<<print $randomDialogue.carol>>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<print $randomDialogue.player>>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="640" height="480" controls autoplay loop muted>
<<if $randomNumber == 1>>
<source src="img/chars/carol/flirt/carol_flirt.webm" type="video/mp4">
<<elseif $randomNumber == 2>>
<source src="img/chars/carol/flirt/carol_flirt_2.webm" type="video/mp4">
<<elseif $randomNumber == 3>>
<source src="img/chars/carol/flirt/carol_flirt_3.webm" type="video/mp4">
<<elseif $randomNumber == 4>>
<source src="img/chars/carol/flirt/carol_flirt_4.webm" type="video/mp4">
<<elseif $randomNumber == 5>>
<source src="img/chars/carol/flirt/carol_flirt_5.webm" type="video/mp4">
<<elseif $randomNumber == 6>>
<source src="img/chars/carol/flirt/carol_flirt_6.webm" type="video/mp4">
<<elseif $randomNumber == 7>>
<source src="img/chars/carol/flirt/carol_flirt_7.webm" type="video/mp4">
<<else>>
<source src="img/chars/carol/flirt/carol_flirt_8.webm" type="video/mp4">
<</if>> <!-- Corrigido o fechamento do <<if>> -->
Your browser does not support the video tag.
</video>
</div>
<p class="spy-narrative">
Aunt Carol leans in, a playful glint in her eyes. Time for some flirtation...
</p>
</div>
<br>
<div class="menu-buttons">
[[Return to Carol's House->CarolHouse]]
</div>
</div><<set $randomNumber to Math.floor(Math.random() * 4) + 1>>
<<set $auntCarol.dailyInteractions.talk to $auntCarol.dailyInteractions.talk + 1>>
<<set $auntCarol.love to $auntCarol.love + $auntCarol.interactions.talk.stats.love>>
<<set $auntCarol.lust to $auntCarol.lust + $auntCarol.interactions.talk.stats.lust>>
<div class="game-container">
<<set _dialogueOptions to [
{
carol: "So, tell me, what's been on your mind since you got here? Don't hold back...",
player: "Just enjoying being here with you, Aunt Carol."
},
{
carol: "You remember that time you got caught sneaking into the pool at midnight? You were so embarrassed, but I thought it was adorable. Still makes me smile.",
player: "Oh god, Aunt Carol, you still remember that?!"
},
{
carol: "This weekend is all about unwinding and having some fun. Is there anything *special* you've been fantasizing about, honey?",
player: "(Slightly flustered) Uh, not really, just... hanging out."
},
{
carol: "I was wondering... do you think I've changed much since you last saw me? Be honest!",
player: "You look... amazing, Aunt Carol. Really amazing."
}
]>>
<<set $randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<!-- Corrigindo caminho da imagem -->
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
<<print $randomDialogue.carol>>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Corrigindo caminho da imagem -->
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<print $randomDialogue.player>>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="640" height="480" controls autoplay loop muted>
<<if $randomNumber == 1>>
<source src="img/chars/carol/talk/carol_talk.webm" type="video/mp4">
<<elseif $randomNumber == 2>>
<source src="img/chars/carol/talk/carol_talk_2.webm" type="video/mp4">
<<elseif $randomNumber == 3>>
<source src="img/chars/carol/talk/carol_talk_3.webm" type="video/mp4">
<<else>>
<source src="img/chars/carol/talk/carol_talk_4.webm" type="video/mp4">
<</if>>
Your browser does not support the video tag.
</video>
</div>
<p class="spy-narrative">
Aunt Carol looks at you, ready to chat. What will she talk about this time?
</p>
</div>
<br>
<div class="menu-buttons">
[[Return to Carol's House->CarolHouse]]
</div>
</div><<if $keyEvents.linearWeekendActive>><<goto "Bedroom">><</if>>
<div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Okay, I'm inside. Now, where to first?
</div>
</div>
<div class="environment-container">
<p class="environment-text">Explore the House of Aunt Carol.</p>
</div>
<!-- Grid de Locações -->
<!-- Grid de Locações -->
<div class="location-grid">
<!-- Cozinha -->
<div class="location-item">
<div class="location-overlay">
[[Kitchen|Kitchen]]
</div>
<img src="img/layout/kitchen/kitchen_small.jpg" alt="Kitchen">
</div>
<!-- Living Room -->
<div class="location-item">
<div class="location-overlay">
[[Living Room|LivingRoom]]
</div>
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<!-- Bedroom Carol -->
<div class="location-item">
<div class="location-overlay">
[[Carol's Bedroom|BedroomCarol]]
</div>
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<!-- Seu Quarto -->
<div class="location-item">
<div class="location-overlay">
[[Your Bedroom|Bedroom]]
</div>
<img src="img/layout/bedroom/bedroom_messy_small.png" alt="Your Bedroom">
</div>
<!-- Bathroom -->
<div class="location-item">
<div class="location-overlay">
[[Bathroom|Bathroom]]
</div>
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom">
</div>
<!-- Pool -->
<div class="location-item">
<div class="location-overlay">
[[To the Pool|Pool]]
</div>
<img src="img/layout/pool/pool_sunny_small.jpg" alt="Pool">
</div>
<!-- LÓGICA CONDICIONAL PARA SAÍDA -->
<<if $keyEvents.openWorldCarolCity>>
<!-- MUNDO ABERTO: Link para o Hub 'Outside' -->
<div class="location-item">
<div class="location-overlay">
[[Go Outside|Outside]]
</div>
<img src="img/layout/house/house.jpg" alt="Go Outside"> <!-- Usando a imagem da casa para sair -->
</div>
<<else>>
<!-- MODO "FIM DE SEMANA": Links diretos para Angela e Loja -->
<!-- Neighbor -->
<div class="location-item">
<div class="location-overlay">
[[Visit Neighbor|AngelaHouse]]
</div>
<img src="img/layout/angela_house/house_flower.webp" alt="Neighbor's House">
</div>
<!-- Store -->
<div class="location-item">
<div class="location-overlay">
[[Visit Store|LocalStore]]
</div>
<img src="img/layout/store/store_outside.jpg" alt="Local Store">
</div>
<</if>>
</div>
<!-- SEÇÃO DE EVENTOS -->
<<silently>>
<<set _availableEventsArray to []>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _eventId, _event range $events>>
<<if _event.location is "CarolHouse" and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">> <<set _eventReqMet to State.hasPlayed(_event.requirements.id)>>
<<elseif _event.requirements.type is "scene">> <<set _eventReqMet to State.hasPlayed(_event.requirements.id)>>
<<elseif _event.requirements.type is "item">> <<set _eventReqMet to $player.inventory.includes(_event.requirements.item)>>
<<elseif _event.requirements.type is "keyEvent">> <<set _eventReqMet to $keyEvents[_event.requirements.id] is true>>
<<elseif _event.requirements.type is "stats">>
<<set _eventReqMet to true>>
<<for _stat, _value range _event.requirements>>
<<if _stat isnot "type" and $player[_stat] < _value>> <<set _eventReqMet to false>> <</if>>
<</for>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</silently>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
/* Adicionando a classe "event-link" diretamente ao macro <<link>> */
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<!-- FIM DA SEÇÃO DE EVENTOS -->
</div><div class="game-container mission-task-container cpool-container">
<p class="mission-objective-text">
Mission: Clean the Pool Together
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/naked/carol_naked_pool.jpg" alt="Carol in the pool, waiting" />
</div>
<p class="mission-narrative-focus cpool-narrative" style="margin-top:10px;">
The sun is high, the air thick with heat. Carol is already in the pool, the water distorting her form. She watches you approach, a challenge in her eyes.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cpool-dialog">
"It won't clean itself," she says, her voice a low murmur. "Get in. Help me."
</div>
</div>
<div class="game-challenge cpool-challenge">
<div id="cpool-content"></div>
</div>
</div><div class="game-container mission-task-container ccook-container">
<p class="mission-objective-text">
Mission: Cooking Dinner Together
</p>
<div class="environment-container">
<div class="environment-video">
<video class="ccook-video" src="img/chars/carol/cooking/carol_cooking_mac_cheese.webm" autoplay muted loop playsinline></video>
</div>
<p class="mission-narrative-focus ccook-narrative" style="margin-top:10px;">
The kitchen is warm, filled with the low hum of the stove. Carol is practically glowing, a genuine, unguarded smile on her face.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol ccook-dialog">
"I was thinking… mac and cheese. The good kind. From scratch. You in?"
</div>
</div>
<div class="game-challenge ccook-challenge">
<div id="ccook-content"></div>
</div>
</div><div class="game-container mission-task-container ccomp-container">
<p class="mission-objective-text">
Mission: Fix Carol's Slow Computer
</p>
<div class="environment-container">
<p class="mission-narrative-focus ccomp-narrative" style="margin-top:10px;">
The living room is quiet. Carol has gone to make coffee, leaving you with her laptop. It's warm on your lap, open to a cluttered desktop. She trusts you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol ccomp-dialog">
"It's been so slow lately, I can barely open my emails," she'd said, handing it to you. "Work your magic?"
</div>
</div>
<div class="game-challenge ccomp-challenge">
<div id="ccomp-content"></div>
</div>
</div><div class="game-container mission-task-container cfaucet-container">
<p class="mission-objective-text">
Mission: Fix the Leaky Faucet
</p>
<div class="environment-container">
<div class="environment-video">
<video class="cfaucet-video" src="img/chars/carol/talking/carol_talking_frustrated.webm" autoplay muted loop playsinline></video>
</div>
<p class="mission-narrative-focus cfaucet-narrative" style="margin-top:10px;">
You hear it in the hall — ploc… ploc… ploc. In the bathroom, Carol stares at the sink like it personally wronged her.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cfaucet-dialog">
"This drip is driving me insane. I tried tightening with my hand, but nothing. And the sound… it’s echoing in my head."
</div>
</div>
<div class="game-challenge cfaucet-challenge">
<div id="cfaucet-content"></div>
</div>
</div><div class="game-container mission-task-container cgstore-container">
<p class="mission-objective-text">
Mission: The Weekly Grocery Run
</p>
<div class="dialog-container" style="margin-bottom:10px;">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_normal_face.jpg" alt="Skylar Face" />
</div>
<div class="dialog-text skylar cgstore-dialog">
"Well, look who’s back. Thought you’d skipped town. What brings you in? Let me guess… errands for Aunt Carol?"
</div>
</div>
<div class="game-challenge cgstore-challenge">
<div id="cgstore-content"></div>
</div>
</div><div class="game-container mission-task-container crose-container">
<p class="mission-objective-text">
Mission: Help Angela with her Roses
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/alexa_angela_garden.jpg" alt="Carol relaxing in the garden, pink dress and sunglasses" />
</div>
<p class="mission-narrative-focus crose-narrative" style="margin-top:10px;">
Afternoon warmth, trimmed hedges, the faint scent of roses. Carol and Angela chat by the fence while you roll your sleeves up.
</p>
</div>
<div class="dialog-container" style="margin-bottom:8px;">
<div class="dialog-image">
<img src="img/chars/neighbor/tease/angela_at_garden.webp" alt="Angela in her garden, umbrella and tote" />
</div>
<div class="dialog-text angela crose-dialog">
"You’re a lifesaver. The weeds grow fast this week. Could you clear the bed around the roses? I’ll owe you one."
</div>
</div>
<div class="dialog-container" style="margin-bottom:10px;">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol crose-dialog">
"He’s good with his hands," Carol says, half-proud, half-playful. "You’ll have your roses breathing again in no time."
</div>
</div>
<div class="game-challenge crose-challenge">
<div id="crose-content"></div>
</div>
</div><div class="game-container mission-task-container claundry-container">
<p class="mission-objective-text">
Mission: Laundry Day
</p>
<div class="environment-container">
<div class="environment-video">
<video class="claundry-video" src="img/chars/carol/tease/carol_tease_w_tits.webm" autoplay muted loop playsinline></video>
</div>
<p class="mission-narrative-focus claundry-narrative" style="margin-top:10px;">
The hum of the house is the only sound in the laundry room. Sunlight streams through the small window, catching dust motes dancing in the air. Carol leans against the machine, a laundry basket at her feet, a new, comfortable silence between you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol claundry-dialog">
"Morning," she says, her voice a low purr. "Since we're… comfortable now… think you can help me with this? Just don't mix the colors."
</div>
</div>
<div class="game-challenge claundry-challenge">
<div id="claundry-content"></div>
</div>
</div><div class="game-container mission-task-container ccocktail-container">
<p class="mission-objective-text">
Mission: Learn to Make Her Favorite Cocktail
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/etc/carol_drink_cocktail.jpg" alt="Carol enjoying the cocktail you made." />
</div>
<p class="mission-narrative-focus ccocktail-narrative" style="margin-top:10px;">
The evening light filters into the kitchen, soft and golden. The day is done, and a quiet, expectant energy hangs in the air between you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol ccocktail-dialog">
"I'm in the mood for something special," she says, leaning against the counter. "My favorite, a 'Sunset Kiss'. Think you're up to the challenge, bartender?"
</div>
</div>
<div class="game-challenge ccocktail-challenge">
<div id="ccocktail-content"></div>
</div>
</div><div class="game-container mission-task-container cmunpack-container">
<p class="mission-objective-text">
Mission: Unpack for the Month
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/alexa_underboob_2.jpg" alt="Carol leaning forward, trying to help, visibly flustered" />
</div>
<p class="mission-narrative-focus cmunpack-narrative" style="margin-top:10px;">
Your suitcase sits half-zipped on the bed. Clothes, chargers, a book you never finished. Carol hovers nearby — picking up a shirt, folding it, then unfolding it again. Her hands won’t settle. Neither will her eyes.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cmunpack-dialog">
"I’ll help… if you want. I’m just— I don’t know where to put anything. Do you want the bottom drawer or… the closet? Sorry, I’m overthinking this."
</div>
</div>
<div class="game-challenge cmunpack-challenge">
<div id="cmunpack-content"></div>
</div>
</div><div class="game-container mission-task-container cmovie-container">
<p class="mission-objective-text">
Mission: Movie Night Choice
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/carol_at_chair.jpg" alt="Carol sitting in a chair, casual shirt, no bra, pretending not to notice" />
</div>
<p class="mission-narrative-focus cmovie-narrative" style="margin-top:10px;">
Living room lights are low. Carol sits in the chair, legs folded, eyes on the TV menu like it's a safety line. After what happened, quiet company is the compromise.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cmovie-dialog">
"We could… watch something. Keep it simple." She clears her throat, then adds, softer, "You pick the genre."
</div>
</div>
<div class="game-challenge cmovie-challenge">
<div id="cmovie-content"></div>
</div>
</div><div class="game-container mission-task-container cmlist-container">
<p class="mission-objective-text">
Mission: Get the Shopping List
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/tease/carol_kitchen_looking.png" alt="Carol at the kitchen counter, keeping busy" />
</div>
<p class="mission-narrative-focus cmlist-narrative" style="margin-top:10px;">
The kitchen is spotless. Carol leans into a counter that doesn’t need cleaning, shoulders tight, eyes anywhere but yours.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cmlist-dialog">
"Oh— there you are. Since you’re staying, could you help with the weekly groceries? The list… I wrote it down somewhere. I think I left it in the living room, near my romance books." She avoids eye contact, forcing a small smile. "Would you mind grabbing it?"
</div>
</div>
<div class="game-challenge cmlist-challenge">
<div id="cmlist-content"></div>
</div>
</div><div class="game-container mission-task-container cmassage-container">
<p class="mission-objective-text">
Mission: A Massage for a Tense Aunt
</p>
<div class="environment-container">
<p class="mission-narrative-focus cmassage-narrative" style="margin-top:10px;">
The lights are low in her bedroom, casting long shadows. The air is still and heavy with the scent of her perfume and the lingering memory of last night. She's lying face down on the bed, a sheet barely covering her.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face" />
</div>
<div class="dialog-text carol cmassage-dialog">
"I'm so… tense," she whispers into the pillow, her voice muffled. "After everything… I just need to unwind. Could you…?" She doesn't need to finish the sentence.
</div>
</div>
<div class="game-challenge cmassage-challenge">
<div id="cmassage-content"></div>
</div>
</div><<approachCharacter "auntCarol">><<silently>>
<<set _approach to [
"You linger by the counter. She catches your reflection in the kettle and her smile turns wicked. \"Need something?\" she asks, voice innocent — but she's already shifting her weight onto one hip the way she did the first time.",
"She's humming while she rinses a mug. You don't even pretend to look away. She doesn't pretend not to notice.",
"\"Don't you have anything to do?\" she murmurs without turning around — but she's not stopping. The silk of her nightgown is doing most of the talking."
].random()>>
<<set _during to [
"You watch the same effortless rhythm. The same shape of her under thin fabric. It's not new now — and somehow that makes it worse. Or better.",
"Her movements are smaller this time, more deliberate. She knows the angles you're watching. You feel her cataloguing your reaction.",
"She bounces just once, then lets it land. A look over her shoulder. \"Better?\" Her smile is mostly teeth."
].random()>>
<<set _outcome to [
"She slides past you to put the mug away, brushing your arm on purpose. \"Have a good morning, sweetie,\" she calls, already turning the corner.",
"She finally settles, leaning back against the counter with her coffee. \"Don't tell anyone,\" she says. \"A girl needs her secrets.\"",
"You don't say anything. Neither does she. The kitchen smells like coffee and Carol and you both pretend that's all it is."
].random()>>
<<set _video to $scenes["KitchenFlirt"].replay.videos.random()>>
<<applyReplay "KitchenFlirt">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="Kitchen">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Catch your breath->Kitchen]]
</div>
</div><<silently>>
<<set _approach to [
"You knock once. She doesn't answer — but the door isn't latched. When you push it open, she's already kneeling on the bed with her robe loose at the shoulders. \"I figured,\" she says.",
"She finds you in the hallway. \"Bedroom,\" she says simply. You follow.",
"You find her sitting on the edge of the bed in the same loose nightgown. She doesn't even ask — she just pats the spot next to her."
].random()>>
<<set _during to [
"Her hand is steady this time. Patient. She's watching your face more than your body. Like she's doing this *for* you, not despite you.",
"She doesn't talk much. Her grip is firmer than the first night, the rhythm faster. She knows what you like now.",
"She hums while she works you. It would be unsettling if it weren't so unbelievably effective."
].random()>>
<<set _outcome to [
"When you're done, she wipes her hand on the towel she pre-positioned and gives you a little kiss on the temple. \"There. Now you can think straight.\"",
"She pulls back her hair and gives you a tired smile. \"Don't make me do all the work next time,\" she says. You can't tell if it's a joke.",
"She doesn't stop until you're spent. Then she lets out a breath she's been holding and rests her forehead briefly against yours. Neither of you says anything."
].random()>>
<<set _video to $scenes["BedroomHandjob"].replay.videos.random()>>
<<applyReplay "BedroomHandjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip back to your own room->Bedroom]]
</div>
</div><<silently>>
<<set _approach to [
"You catch her on the couch with a glass of wine and the lights dimmed. \"There you are,\" she says without looking up. \"I was about to come find you.\"",
"She gestures to the floor in front of the couch. \"Sit,\" she says. You sit. She slides down to her knees in front of you like it's the most natural thing in the world.",
"You don't have to ask. She catches your eye, sets her glass down, and crosses the room to you."
].random()>>
<<set _during to [
"She takes her time. There's no nervous edge anymore — just heat. She looks up at you between strokes and you forget what you were going to say.",
"This isn't the first time. It shows. She knows exactly where to apply pressure, exactly how long to tease. You're undone in minutes.",
"Her eyes lock on yours and don't let go. You realize halfway through she's doing this as much for herself as for you."
].random()>>
<<set _outcome to [
"She sits back on her heels and licks her lips, satisfied. \"Better?\" she asks. You can only nod. \"Good. Now go pour me another glass.\"",
"She stands, fixes her hair in the hallway mirror, and walks back to her wine like nothing happened. The radio's still playing.",
"She takes your hand and pulls you down onto the couch with her. \"Stay,\" she says. \"Just for a bit.\""
].random()>>
<<set _video to $scenes["CS015"].replay.videos.random()>>
<<applyReplay "CS015">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Take a moment->LivingRoom]]
</div>
</div><<silently>>
<<set _approach to [
"She's got music on. She doesn't stop to talk.",
"You step into the doorway. She glances up from the speaker and her smile turns slow.",
"She catches you watching from the hall. \"You again,\" she says — but she doesn't move away from the music."
].random()>>
<<set _during to [
"The same hip-roll, the same loose t-shirt — but she's locked onto your reaction this time. Performing for an audience of one.",
"It's filthy now. She knows you've seen it. She slows down on purpose.",
"She turns to face you mid-bounce, eyebrows raised. \"Like the encore?\""
].random()>>
<<set _outcome to [
"She drops onto the couch panting and grins. \"Don't tell anyone I'm thirty-six.\"",
"She catches her breath and wipes her forehead with the hem of her shirt — flashing skin she didn't quite mean to.",
"She kills the music. \"Get out of here before I do something we'd both regret. Go on.\""
].random()>>
<<set _video to $scenes["LivingRoomInteraction"].replay.videos.random()>>
<<applyReplay "LivingRoomInteraction">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sit down->LivingRoom]]
</div>
</div><<silently>>
<<set _approach to [
"She's sprawled on the lounger, sunglasses on, top untied across her back. She doesn't move when you sit down.",
"\"Bring sunscreen this time?\" she asks without opening her eyes. The straps of her bikini are already loose.",
"You drop into the lounger beside her. She tilts her glasses down. \"Watching, are we?\""
].random()>>
<<set _during to [
"She rolls onto her back and stretches. The bikini doesn't quite cover everything anymore. She doesn't fix it.",
"She does that little arch she did the first time — she remembers what it did to you. She does it slower.",
"She catches you staring through the gap and laughs. \"Subtle, kid. Real subtle.\""
].random()>>
<<set _outcome to [
"She hands you the bottle of lotion. \"Don't waste it,\" she says, and rolls over.",
"She sits up and re-ties her top with a smile. \"That's quite enough sun for one afternoon.\"",
"\"Pool day, every day,\" she sighs, content. \"Now go fetch me water before I melt.\""
].random()>>
<<set _video to $scenes["PoolsideRelaxation"].replay.videos.random()>>
<<applyReplay "PoolsideRelaxation">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_clean.webp" alt="Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Head back inside->Pool]]
</div>
</div><<silently>>
<<set _approach to [
"She's standing in front of the open wardrobe again, hands on hips. \"What do you think — black or red?\"",
"She turns when you come in. \"Perfect timing. I need an opinion.\"",
"\"Tell me which one fits,\" she says, already lifting a hanger. \"Honest answer.\""
].random()>>
<<set _during to [
"She turns to face the mirror, then to face you. The fabric shifts. She holds eye contact too long.",
"She kicks off her shoes one at a time and changes without preamble. You have to remember to breathe.",
"She pulls one strap aside, then the other, asking honest questions about fit. There is nothing honest about her smile."
].random()>>
<<set _outcome to [
"\"Thanks, sweetie. I'll wear that one.\" She kisses your cheek as she passes you.",
"She closes the wardrobe and arches a brow. \"Helpful little nephew, aren't you.\"",
"She doesn't change back. She drops onto the bed in the outfit and gestures for you to leave. \"Go. I have to think.\""
].random()>>
<<set _video to $scenes["WardrobeHelp"].replay.videos.random()>>
<<applyReplay "WardrobeHelp">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_carol_wardrobe.webp" alt="Carol's Wardrobe">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Step into the hall->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"The water's running again. The door is open just enough.",
"You hear humming. The door isn't locked. It never is, lately.",
"She catches your reflection through the open crack. \"You picked a very specific time to wash your hands, didn't you.\""
].random()>>
<<set _during to [
"Through the steam, the same silhouette — but she's facing the door now. She knows.",
"She rinses her hair, slow, deliberate. Same sequence. Same rhythm. Different audience response.",
"She doesn't turn off the water when she sees you. She just smiles and keeps going. The door stays open."
].random()>>
<<set _outcome to [
"She wraps the towel around herself eventually. \"You're getting bolder, sweetie. Careful with that.\"",
"She kills the water, steps out, and walks past you completely calm. \"Door, please. I need a minute.\"",
"She looks at you in the mirror as she fixes her hair. \"You'd better hope your aunt has a good sense of humor.\""
].random()>>
<<set _video to $scenes["BathroomEspionage"].replay.videos.random()>>
<<applyReplay "BathroomEspionage">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip out of the bathroom->Bathroom]]
</div>
</div><<silently>>
<<set _approach to [
"She's on the couch with the same nearly-empty bottle. She doesn't bother with the glass anymore.",
"She pats the cushion next to her and slides her glass over. \"You drink. I'll catch up.\"",
"She raises her glass in a toast as you walk in. \"To being a terrible influence on each other.\""
].random()>>
<<set _during to [
"She doesn't bother with the t-shirt this time. The fabric comes off before you've even sat down.",
"She sips, sets the glass down, and arches her back like she's stretching. The shirt rides up. She doesn't fix it.",
"It's almost ritual now — the bounce in the t-shirt, the look, the slow reveal. She loves the second act."
].random()>>
<<set _outcome to [
"She tucks back in, refills her glass, and laughs. \"Go to bed before you do something we both regret.\"",
"She kisses your forehead and finishes her glass. \"Goodnight, sweetie. Lock my door on your way out.\"",
"She drops her shirt on the rug and walks toward her bedroom. \"Coming?\" she says without turning."
].random()>>
<<set _video to $scenes["EveningWine"].replay.videos.random()>>
<<applyReplay "EveningWine">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Head upstairs->LivingRoom]]
</div>
</div><<silently>>
<<set _approach to [
"You wake up to the same warm pressure. She's already in bed with you. \"Time to make this morning worth it,\" she whispers.",
"She's at your bedside, mug in hand. She sets it down. \"Stay still. I missed this.\"",
"She slides the covers aside and climbs on without saying anything. Her eyes are already half-lidded."
].random()>>
<<set _during to [
"She's confident now. No fumbling, no checking. She knows exactly how to use her body to wreck yours.",
"She presses her chest against you and rocks slow at first, then picks up the pace. Watching your face the whole time.",
"It's slower than the first time. More deliberate. She knows there's no rush — she has all morning."
].random()>>
<<set _outcome to [
"She wipes herself off with the corner of the sheet and gives you a kiss. \"Good morning. Now get up.\"",
"She rolls onto her back beside you and exhales. \"Best wake-up call you'll ever get, sweetie.\"",
"She gets out of bed unhurried, fixes her bra, and grins. \"Coffee's in the kitchen. You earned it.\""
].random()>>
<<set _video to $scenes["MorningTitsjob"].replay.videos.random()>>
<<applyReplay "MorningTitsjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_messy_small.png" alt="Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Get up->Bedroom]]
</div>
</div><<silently>>
<<set _approach to [
"The bathroom door is propped open and she's already in the water. She moves over without looking up.",
"\"Get in,\" she says simply. \"You smell like the day.\"",
"She holds out a hand from the steaming water and pulls you down beside her."
].random()>>
<<set _during to [
"Same routine — soap on her shoulders, her hands wandering far past where they need to. She knows. You know.",
"She turns around in the water and presses against you. The bath is too small. She doesn't seem to mind.",
"She passes you the soap. \"Help me reach the bits I can't,\" she says. The list is generous."
].random()>>
<<set _outcome to [
"She steps out first and tosses you a towel. \"Don't drown without me. I'd never forgive you.\"",
"She rests her head on your shoulder for a long moment, eyes closed. \"This. Just this. For a minute.\"",
"She shoos you out of the tub eventually. \"My turn for the soak. Get out, sweetie.\""
].random()>>
<<set _video to $scenes["SharedBathProvocation"].replay.videos.random()>>
<<applyReplay "SharedBathProvocation">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->Bathroom]]
</div>
</div><<silently>>
<<set _approach to [
"She passes you in the hallway and stops. \"Bedroom,\" she says quietly. You follow.",
"You catch her at the foot of the stairs. She doesn't say anything — just takes your hand and leads.",
"She finds you in the guest room and closes the door behind her. The lock clicks softly."
].random()>>
<<set _during to [
"It's the same act, but the framing has changed. She isn't grateful anymore. She just... wants this.",
"She does it like she means it. Eyes locked. Pace controlled. She's done apologizing for what she is.",
"There's no ceremony. She kneels, pushes you back onto the bed, and gets to work. She's been thinking about it all day."
].random()>>
<<set _outcome to [
"She wipes her mouth on the back of her hand and smiles. \"There. Now I can sleep.\"",
"She climbs up beside you and rests her head on your chest. \"I love that you keep coming back for this.\"",
"She gets up, fixes her hair in the mirror, and walks out without a word. The door clicks shut behind her."
].random()>>
<<set _video to $scenes["FarewellBlowjob"].replay.videos.random()>>
<<applyReplay "FarewellBlowjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_messy_small.png" alt="Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Lie back->Bedroom]]
</div>
</div><<silently>>
<<set _approach to [
"She catches you in the hallway and doesn't speak. She just takes your hand and leads you to her bedroom. The door clicks shut.",
"She's already kneeling beside the bed when you walk in. She looks up. \"Door,\" she says quietly. You shut it.",
"\"Sweetie. Bedroom. Now.\" She doesn't ask twice. You don't argue."
].random()>>
<<set _during to [
"She works you slowly, eyes locked. There's no urgency tonight — she's not paying off a favor anymore. She just *wants this*.",
"She doesn't break eye contact. Not for a single beat. The intensity is unsettling. The intensity is the whole point.",
"Her hands settle on your thighs. Steady. Patient. Owning the moment without making a show of it."
].random()>>
<<set _outcome to [
"She wipes the corner of her mouth with her thumb and smiles. \"There. *Now* I can sleep.\"",
"She sits back on her heels and exhales like she's been holding it for hours. \"Thank you,\" she whispers. You're not sure who's thanking who.",
"She climbs up beside you and lays her head on your chest. \"Don't move. Just for a minute.\""
].random()>>
<<set _video to $scenes["CS016"].replay.videos.random()>>
<<applyReplay "CS016">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Catch your breath->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"She's at the edge of the pool, sunglasses on, water dripping down her shoulders. She motions you over without lifting her head.",
"\"Drop the towel,\" she says without opening her eyes. You don't even need to ask what for.",
"She climbs out of the pool, walks straight to you, and kneels on the lounger beside you. She doesn't say a word."
].random()>>
<<set _during to [
"Wet hair, chlorine, the smell of sunscreen. Her mouth on you in broad daylight. The neighbors have to be home — she doesn't seem to care.",
"She works you with the pool water still beading on her skin. Her hand braces on your knee. She looks up. She *grins*.",
"The lounger creaks under both of you. Her tan hands. Her wet skin. The Florida sun. It's almost too much to take in."
].random()>>
<<set _outcome to [
"She wipes her chin and laughs. \"Don't look so shocked. I told you I'm a pool girl at heart.\"",
"She slides back into the water. \"Cool off, sweetie. You earned it.\"",
"She wraps a towel around herself. \"Lemonade?\" she asks like nothing happened. \"In the kitchen. Help yourself.\""
].random()>>
<<set _video to $scenes["CS017"].replay.videos.random()>>
<<applyReplay "CS017">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_clean.webp" alt="Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->Pool]]
</div>
</div><<silently>>
<<set _approach to [
"You catch her at the foot of the stairs. She doesn't ask why. She just reaches back for your hand and pulls you up to her room.",
"Her bedroom door is already cracked open when you arrive. She's lying across the bed, waiting. She doesn't say a thing.",
"\"Lock it,\" she says when you walk in. You lock it. \"Now come here.\""
].random()>>
<<set _during to [
"She moves with the same slow confidence as always. But it's deeper now. There's no flinching. No pretending. Just heat.",
"She rolls onto her hands and knees and looks back at you. The look is everything. She doesn't need to say anything.",
"She rides you on top this time. Both her hands on your chest. Her hair falling forward. Her eyes never leaving yours."
].random()>>
<<set _outcome to [
"She collapses next to you and laughs softly. \"Christ. We do that, do we.\"",
"She kisses your shoulder. \"Don't tell anyone. Promise me, sweetie. Not even in your head.\"",
"She gets up, fixes the sheets, and walks to the bathroom on shaky legs. \"Come find me in fifteen minutes. I want round two.\""
].random()>>
<<set _video to $scenes["CS018"].replay.videos.random()>>
<<applyReplay "CS018">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Lie there->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"She finds you between chores. \"Come up,\" she says. Just two words. You drop the laundry basket and follow.",
"She passes you in the hallway with a stack of folded sheets. She drops them on the linen shelf and kisses you. \"Bedroom. Now.\"",
"You knock on her door in the middle of the afternoon and she opens it already half-undressed. \"Took you long enough.\""
].random()>>
<<set _during to [
"Afternoon sun through the curtains. Carol on her hands and knees. The whole house silent. You'll never forget it.",
"She loves it like this — bright, slow, unhurried. The middle of the day. The window cracked. The whole street outside oblivious.",
"She catches her own reflection in the mirror across the room and locks eyes with herself while you take her. It's the most surreal thing you've ever seen."
].random()>>
<<set _outcome to [
"She lies face-down on the sheets, completely spent. \"Wake me in an hour. I have to make dinner eventually.\"",
"She rolls onto her back, hair fanned out across the pillow. \"This. This was a *good* afternoon.\"",
"She sits up, finds her shirt on the floor, and grins. \"Nephew, you're going to give me a heart attack one of these afternoons.\""
].random()>>
<<set _video to $scenes["CS019"].replay.videos.random()>>
<<applyReplay "CS019">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Get dressed->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"Candles. Quiet music in the background. She opens the door and pulls you in by your collar. \"Tonight is different,\" she says. \"Slow.\"",
"She finds you in the hallway and takes your face in her hands. \"Tonight,\" she says, \"I want you to make it last.\"",
"Her bedroom is dim. The lamp is on low. She's already in bed under the sheet, watching the door. \"Come here,\" she whispers."
].random()>>
<<set _during to [
"Slow. Eye contact. Her hand on the back of your neck, keeping your face close. Her mouth at your ear, telling you what she needs.",
"She kisses you between every movement. It's softer than anything either of you usually does. It almost feels like something else.",
"She rocks above you in the lamplight, breathing slow, letting it build. She's never made it last this long before."
].random()>>
<<set _outcome to [
"She rests her cheek against your shoulder afterward and doesn't move for a long time. \"That,\" she finally says. \"That was something.\"",
"She kisses your forehead. \"I love you, sweetie. I shouldn't say it. But I do.\" Then she gets very quiet.",
"She pulls the sheet over both of you. \"Sleep. Stay. Tomorrow we pretend nothing happened.\" Her breathing slows."
].random()>>
<<set _video to $scenes["CS020"].replay.videos.random()>>
<<applyReplay "CS020">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay with her->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"She catches you alone in her bedroom and doesn't waste words. \"Sit on the bed. Now.\" You sit. She climbs on top.",
"\"I want to ride you tonight,\" she says, walking past you to lock the bedroom door. \"All the way. Don't stop me.\"",
"She's already on the bed when you arrive, in nothing but her bra. \"Hurry up. I've been thinking about this since lunch.\""
].random()>>
<<set _during to [
"She rides you fast at first, then slows down to make it last. Hands braced on your chest. Hair wild. The bed frame creaks against the wall.",
"She leans forward, her hair falling around your face. \"Don't pull out,\" she whispers. \"I want it inside me. All of it.\"",
"She rides like she means to take everything you have. And she does."
].random()>>
<<set _outcome to [
"She collapses on top of you, breathing hard. \"Don't move. Don't even think about moving.\"",
"She rolls off, panting, and grins at the ceiling. \"You're going to ruin me, sweetie. Completely.\"",
"She stretches and laughs. \"Okay. *Now* I can sleep. Don't wake me.\""
].random()>>
<<set _video to $scenes["CS021"].replay.videos.random()>>
<<applyReplay "CS021">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Drift off->BedroomCarol]]
</div>
</div><<silently>>
<<set _approach to [
"She locks her bedroom door. She doesn't speak. The look she gives you when she turns around says everything.",
"\"Tonight,\" she whispers, \"the *other* way. You know I want it.\" She slips off her robe and waits.",
"She finds you in the hall after midnight. \"My bedroom. Five minutes. Bring the bottle from the bathroom.\""
].random()>>
<<set _during to [
"She's done this before now. There's no nervousness, no negotiation. Just slow heat and her trust in you.",
"She gasps when you start, then settles. Then she pushes back. \"More,\" she says, voice barely above a whisper. \"All of it.\"",
"Her face is buried in the pillow. Her hands grip the sheets. She doesn't make a sound — she's afraid she'll wake the whole street if she does."
].random()>>
<<set _outcome to [
"She rolls onto her side and pulls you against her. \"That,\" she breathes. \"That stays between us. Forever. Promise.\"",
"She reaches back and squeezes your hand. \"I shouldn't love that. I really shouldn't. But I do.\"",
"She gets up unsteadily and walks to the bathroom. The shower starts. She doesn't come back for half an hour."
].random()>>
<<set _video to $scenes["CS022"].replay.videos.random()>>
<<applyReplay "CS022">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Lie there->BedroomCarol]]
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 0: O CONVITE NO BANHEIRO ===== -->
<div class="changing-scene-stage" id="bath-stage-0">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom Entrance">
</div>
<p class="spy-narrative">
You step into the bathroom, perhaps intending to use it yourself, when you find Aunt Carol already there, just by the entrance to the shower stall. She's wrapped in a plush towel, another one around her hair, but there's a knowing, almost challenging glint in her eyes as she sees you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Inviting Face">
</div>
<div class="dialog-text carol">
Oh, hey there, sweetie. Perfect timing. I was just about to hop in for a quick shower to freshen up from this afternoon heat... Care to join me? The water's nice and warm, and there's plenty of room for two... or three, if you count your little friend.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Stunned)">
</div>
<div class="dialog-text player">
(Thinking) Join... join her? In the shower? Is this really happening?! My blood is already rushing south.
</div>
</div>
<p class="spy-narrative">
Before you can fully process the audacious invitation, she drops her towel with a wink, revealing her glorious naked form for a tantalizing second, and slips into the shower stall, partially closing the frosted glass door behind her.
</p>
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay muted playsinline style="max-width: 500px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/bath/alexapearl_bath_1.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">The video shows her beckoning you, then entering the shower. The "cut" implies you've decided to follow.</p>
<div class="menu-buttons" style="margin-top: 20px;">
<<link "Hesitantly step into the steamy shower stall..." >>
<<goto "AfternoonSharedBath_Stage1">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 1: APLICAÇÃO DE LOÇÃO - PARTE 1 ===== -->
<div class="changing-scene-stage" id="bath-stage-1">
<p class="spy-narrative">
The shower stall is filled with warm steam and the scent of her floral soap. Water cascades around you both. Carol turns, a bottle of what looks like body lotion or shower gel in her hand. She gives you a slow, deliberate smile.
</p>
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 520px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/bath/alexapearl_bath_2.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She begins to apply the lotion to herself, her movements languid and overtly sensual. First her full breasts, massaging them in slow circles, her nipples hardening under her touch. Then down her legs, lingering on her inner thighs. She turns, presenting her magnificent, lotion-slicked ass to you, before working the cream suggestively close to, and then directly onto, her glistening folds. It's an incredibly intimate performance, clearly for your benefit.
</p>
<div class="menu-buttons">
<<link "Watch, completely mesmerized...">>
<<goto "AfternoonSharedBath_Stage2">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 2: APLICAÇÃO DE LOÇÃO - PARTE 2 (CLOSE-UP) ===== -->
<div class="changing-scene-stage" id="bath-stage-2">
<p class="spy-narrative">
She seems to sense your rapt attention, a satisfied hum escaping her lips. She moves closer, ensuring you get an even better view of her ministrations.
</p>
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 500px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/bath/alexapearl_bath_3.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
The close-up is almost too much. Her hands lavish attention on her breasts again, then trail down to her pussy, her fingers circling and rubbing with an intensity that makes your own groin ache. She finishes with a few playful pats on her bum, letting the shower water begin to rinse the excess lotion away, her body gleaming.
</p>
<div class="menu-buttons">
<<link "Swallow hard, trying to remain standing...">>
<<goto "AfternoonSharedBath_Stage3">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 3: A DESPEDIDA CURTA ===== -->
<div class="changing-scene-stage" id="bath-stage-3">
<p class="spy-narrative">
With a final, lingering look that promises more, she reaches out and turns off the shower. The sudden silence is almost deafening.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Satisfied Face">
</div>
<div class="dialog-text carol">
Well, I hope you enjoyed our... *quick* shower together, sweetie. Did it help you cool off? Or maybe just heat you up more?
</div>
</div>
<p class="spy-narrative">
She chuckles, grabbing her towel and beginning to dry herself, seemingly unconcerned by your dazed state. The "show" is over, for now.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Mumble something incoherent and exit the bathroom...">>
<<set $scenes["SharedBathProvocation"].status to 1>>
<<set $auntCarol.lust += 25>>
<<set $auntCarol.corruption += 10>>
<<set $player.lust += 15>>
/* <<set $time += 1>> // Opcional: A "cena" inteira pode levar 1 hora */
<<goto "SundayAfternoonNarrative">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- PARTE 1: APROXIMAÇÃO E ESPIONAGEM INICIAL -->
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom Entrance">
</div>
<p class="spy-narrative">
Afternoon sunlight filters into the main bathroom area. You hear the distinct sound of running water coming from the shower stall, which has its own frosted glass door. Aunt Carol must be in there. A wave of curiosity washes over you...
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) She's taking a shower... I probably shouldn't... but what if I just take a tiny peek? Just to see...
</div>
</div>
<p class="spy-narrative">
You quietly approach the frosted glass door of the shower area. It's steamy, but you can make out her silhouette moving within. You find a spot where the condensation is a little thinner...
</p>
<div class="changing-video-container">
<video controls autoplay loop muted playsinline>
<source src="img/chars/carol/bath/alexapearl_bath_spying.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Your heart pounds. Through the obscured view, you see her washing her hair, water cascading down her bare back and shoulders. She turns, rinsing, and you get flashes of wet skin, the curve of her hip, the swell of a breast as she moves. It's intoxicating. You linger, perhaps longer than you should, your gaze fixed.
</p>
<hr style="border-color: rgba(200, 180, 220, 0.2); margin: 25px 0;">
<!-- PARTE 2: O BARULHO E SER PEGO -->
<p class="spy-narrative">
You've definitely overstayed. Deciding you've pushed your luck, you try to back away. But in your haste, your elbow bumps a shelf, sending a bottle of shampoo clattering loudly to the tiled floor!
</p>
<p class="player-reaction" style="font-size: 1.5em; font-weight:bold; color: #E74C3C; text-align:center; margin: 10px 0 20px 0;">CRASH!</p>
<p class="spy-narrative">The sound of the shower abruptly stops. Silence. Then...</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol's voice from the shower">
</div>
<div class="dialog-text carol">
Hello? Is someone out there?
</div>
</div>
<p class="spy-narrative">
Before you can react, the frosted door slides open. Aunt Carol peers out, water dripping, shielding her body with her hands. Her eyes widen when she sees you, shock quickly morphing into a complex mix of disappointment and something unreadable.
</p>
<div class="caught-video-container"> <!-- Container para o vídeo menor -->
<video controls autoplay loop muted playsinline> <!-- Loop pode ser removido se o vídeo tiver um fim natural para esta parte -->
<source src="img/chars/carol/bath/alexapearl_bath_catch_spying.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Blushing/Disappointed Face">
</div>
<div class="dialog-text carol">
Oh my god... You! What... I'm taking a shower!
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Stammering) Aunt Carol, I... I'm so sorry! I just... I heard the water and I... I got curious... I didn't mean to...
</div>
</div>
<p class="spy-narrative">
She sighs, a deep, troubled sound. "Okay... fine," she says, her voice barely a whisper. "Just... just once. To satisfy your curiosity, I guess."
The video shows her hesitant reveal. "Then you get out."
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Blushing/Stern Face">
</div>
<div class="dialog-text carol">
(More firmly) Okay. Get out of here now. Let me finish my shower in peace.
</div>
</div>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Stumble out of the bathroom, heart racing...">>
<<set $scenes["BathroomEspionage"].status to 1>>
<<set $auntCarol.lust += 25>>
<<set $auntCarol.corruption += 10>>
<<goto "SaturdayBathroomAftermath">>
<</link>>
<<link "Step into the bathroom and grab her">>
<<set $gameOverReason to "kickedOut">>
<<goto "GameOver">>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem do corredor escuro ou porta do quarto da Carol entreaberta -->
<img src="img/layout/bedroom_carol/hallway_night_door_ajar.jpg" alt="Hallway at night, Carol's door slightly open">
</div>
<p class="spy-narrative">
The house is quiet now, settled into the deep calm of late evening. Feeling tired from the trip and the day's events, you decide it's only polite to wish Aunt Carol a proper goodnight before heading to your own room. As you approach her bedroom door, you notice it's slightly ajar, a sliver of warm light spilling into the dimly lit hallway.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Should probably knock... but maybe she's already asleep? I'll just peek in quickly...
</div>
</div>
<p class="spy-narrative">
Yielding to curiosity, you push the door open just a fraction more and peer inside. Your breath catches in your throat.
</p>
<!-- O Vídeo Principal da Cena -->
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 640px; border-radius: 8px;" controls autoplay loop muted playsinline>
<source src="img/chars/carol/tease/alexapearl_in_bed.webm" type="video/webm">
<!-- <source src="img/chars/carol/tease/alexapearl_in_bed.webm" type="video/mp4"> -->
Your browser doesn't support embedded videos or the WEBM/MP4 format.
</video>
</div>
<p class="spy-narrative">
Aunt Carol is half-sitting, half-lying on her bed, turned mostly away from the door. She's wearing only a loose, oversized t-shirt that barely reaches her upper thighs, revealing long, smooth legs and a tantalizing glimpse of simple panties underneath. Her backside is angled towards you, and she seems completely lost in her own world. As you watch, frozen in the doorway, her hand moves... She gives her own plush buttock a firm, resonant smack, then playfully grabs and jiggles the soft flesh. A quiet sigh escapes her lips, a sound of pure, private pleasure. She repeats the motion, seemingly exploring her own curves with a lazy, sensual touch, completely unaware she has an audience.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Whoa... Okay. Definitely *not* interrupting this. She has no idea I'm here... I should get out. Now.
</div>
</div>
<p class="spy-narrative">
Your face feels hot, and a strange mix of embarrassment and undeniable arousal floods through you. Seeing her like this, so unguarded and indulging in a private moment, feels intensely intimate... and incredibly forbidden. You carefully pull the door back to its original position, making sure not to make a sound, your heart pounding against your ribs.
</p>
<br>
<!-- Conclusão da Cena -->
<div class="menu-buttons">
<<set $scenes["Bedtime"].status to 1>> /* Marca a cena como concluída */
<<set $auntCarol.lust to $auntCarol.lust + 15>> /* Recompensa de Lust (para Carol) */
<<set $auntCarol.corruption to $auntCarol.corruption + 5>> /* Recompensa de Corrupção (para Carol) */
/* Cenas de observação não avançam o tempo */
[[Go to bed...->FridayNightSleep]]
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="afternoon-delight-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="final-taboo-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="relapse-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="rubicon-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="poolside-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="riding-creampie-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="romantic-night-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- ===== STAGE 0: THE SILENCE IN THE KITCHEN ===== -->
<div class="changing-scene-stage" id="ctd-stage-0">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="The kitchen at night">
</div>
<p class="spy-narrative">
You enter the kitchen later that afternoon. Carol is at the stove, preparing dinner. But the playful energy from earlier today is gone...The air is heavy, and you can't help but wonder if she's still thinking about what happened in the bathroom.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol's neutral face">
</div>
<div class="dialog-text carol">
Dinner's almost ready. Set the table, please.
</div>
</div>
<p class="spy-narrative">
Her tone is polite, but cold. The "please" feels like a formal command, not a request.
</p>
<div class="menu-buttons" style="margin-top: 20px;">
<<link "Set the table and wait.">>
<<goto "CarolTenseDinner_Stage1">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== STAGE 1: THE SILENT DINNER & PLAYER'S CHOICE ===== -->
<div class="changing-scene-stage" id="ctd-stage-1">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/carol/eating/carol_eating_mad.png" alt="Carol eating dinner, looking serious">
</div>
<p class="spy-narrative">
You sit down to eat. The food is good, but the silence is deafening, broken only by the clinking of silverware on plates. Carol eats methodically, her eyes fixed on her food. Any attempt you make to catch her eye is immediately deflected. The silence becomes unbearable. You have to say something.
</p>
</div>
<div class="scene-options">
<<link `"The food's great, Aunt Carol."`>>
<<set $carolResponse to "neutral">>
<<goto "CarolTenseDinner_Stage2">>
<</link>>
<<link `"How was your day?"`>>
<<set $carolResponse to "cold">>
<<goto "CarolTenseDinner_Stage2">>
<</link>>
<<link `"You're quiet today... thinking about something?"`>>
<<set $carolResponse to "negative">>
<<goto "CarolTenseDinner_Stage2">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== STAGE 2: THE REACTION AND ESCAPE ===== -->
<div class="changing-scene-stage" id="ctd-stage-2">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol's mad/annoyed face">
</div>
<div class="dialog-text carol">
<<if $carolResponse is "neutral">>
"Thanks."
<<elseif $carolResponse is "cold">>
"Fine. The usual."
<<elseif $carolResponse is "negative">>
"I'm just tired. And hungry. Can we please just eat in peace?"
<</if>>
</div>
</div>
<p class="spy-narrative">
<<if $carolResponse is "neutral">>
She nods once, without looking up. The conversation dies instantly.
<<elseif $carolResponse is "cold">>
She finally looks at you, but her gaze is distant. It's clear she doesn't want to elaborate.
<<elseif $carolResponse is "negative">>
She puts her fork down with a sharp clatter. The rebuke is clear. She's building a wall.
<</if>>
</p>
<p class="spy-narrative">
As soon as she finishes eating, Carol stands up abruptly.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol's mad/annoyed face">
</div>
<div class="dialog-text carol">
I... have some things to do. I'll see you later.
</div>
</div>
<p class="spy-narrative">
It's an obvious excuse. She takes her plate to the sink and leaves the kitchen quickly, leaving you alone at the table. The feeling of distance and rejection is palpable. You know that regaining that intimacy will be a challenge.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Finish your meal in silence.">>
<<set $scenes["CS014"].status to 1>>
<<set $auntCarol.love += 5>>
<<set $auntCarol.lust -= 5>>
<<goto "SaturdayEveningNarrative">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="thank-you-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 0: A SURPRESA FINAL ===== -->
<div class="changing-scene-stage" id="farewell-stage-0">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem do quarto do jogador, malas quase prontas -->
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="Player's bedroom, packing bags">
</div>
<p class="spy-narrative">
Evening shadows lengthen in your room. You were unpacking — you're staying for a while now — when there's a soft knock and the door creaks open. It's Aunt Carol, and the look in her eyes tells you everything.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Determined Face">
</div>
<div class="dialog-text carol">
Not packing anymore, I see. Good. Since you're going to be my housemate for a while longer now, I figured we should... *celebrate* the arrangement properly. Why don't you take your friend out from down there and lie back on the bed for a moment? Auntie has a very special way of welcoming you home.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Shocked/Anticipating)">
</div>
<div class="dialog-text player">
(Thinking) My... friend? Oh god, she can't mean... After everything today, is she serious?! My heart is hammering against my ribs. There's no refusing that look in her eyes.
</div>
</div>
<p class="spy-narrative">
Wordlessly, your body moving almost on autopilot, fueled by a potent cocktail of shock, disbelief, and undeniable, throbbing anticipation, you do as she says. You unbuckle your pants, your already semi-aroused cock springing free, and lie back on the bed, entirely at her mercy.
</p>
<div class="menu-buttons" style="margin-top: 20px;">
<<link "Brace yourself for whatever comes next...">>
<<goto "EveningFarewellBJ_Stage1">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 1: BLOWJOB - PARTE 1 ===== -->
<div class="changing-scene-stage" id="farewell-stage-1">
<p class="spy-narrative">
Aunt Carol approaches the bed, a predatory glint in her eyes. She kneels beside you, her gaze fixed on your erection. Without a word, she leans down...
</p>
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 460px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/blowjob/alexapearl_blowjob_end_scene_1.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Her warm, wet mouth engulfs you. The sensation is electric. She starts slowly, teasingly, her tongue expertly darting and swirling, before her pace quickens, her head bobbing with increasing urgency. The video shows her dedicated work, slobbery and intense, before it abruptly cuts after a minute of pure, mind-numbing pleasure.
</p>
<div class="menu-buttons">
<<link "Gasp, trying to catch your breath...">>
<<goto "EveningFarewellBJ_Stage2">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 2: BLOWJOB - PARTE 2 (MÃOS E PEITOS) ===== -->
<div class="changing-scene-stage" id="farewell-stage-2">
<p class="spy-narrative">
She pulls back for a moment, a string of saliva connecting her lips to your glistening cock. Her eyes are glazed with lust. Then, she dives back in, this time incorporating her hands, stroking your shaft in rhythm with her mouth.
</p>
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 460px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/blowjob/alexapearl_blowjob_end_scene_2.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
The video continues, showing her masterful technique. She alternates between deep throating you and using her hands, occasionally guiding your throbbing cock up towards her breasts, pressing it between them briefly before her mouth reclaims its prize. The stimulation is relentless, pushing you closer and closer to the edge.
</p>
<div class="menu-buttons">
<<link "Arch your back, moaning uncontrollably...">>
<<goto "EveningFarewellBJ_Stage3">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 3: TITSJOB E FINALIZAÇÃO ===== -->
<div class="changing-scene-stage" id="farewell-stage-3">
<p class="spy-narrative">
Just as you feel you can't take much more, she lifts her head, positioning your slick cock between her breasts, now nestled inside her short, presumably braless top.
</p>
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 460px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/blowjob/alexapearl_blowjob_end_scene_3.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Her breasts press against you as she begins a rapid, vigorous titsjob. She spits onto her own cleavage to make it even slicker, her pace increasing to a frenzy. You explode, hot cum erupting over her chest and the fabric of her top. Even after you're spent, she continues for a few more powerful strokes, milking every last drop before finally slowing. She looks down at the mess, then up at you, a satisfied "Thank you" escaping her lips as the video ends.
</p>
<div class="dialog-container" style="margin-top: 20px;">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Victorious Face">
</div>
<div class="dialog-text carol">
(A throaty chuckle) Well now... Did you *really* think I'd let you leave without getting a proper taste of what you've been making me crave all weekend? ...Consider this my official welcome to your new home. For both of us.
</div>
</div>
<p class="spy-narrative">
She rises, adjusts her top with a satisfied sigh, and heads for the door, leaving you a panting, sticky mess on the bed.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Collapse onto the bed, completely drained...">>
<<set $scenes["FarewellBlowjob"].status to 1>>
<<set $auntCarol.lust += 40>>
<<set $auntCarol.corruption += 20>>
<<set $auntCarol.love += 25>>
<<set $player.lust to 20>>
<<set $player.energy -= 15>> /* Isso aqui gasta uma energia do cão! */
/* <<set $time += 1>> // Se quiser que consuma tempo */
<<goto "SundayNightSleep">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container"> <!-- Reutilizando a classe base para o container da cena -->
<!-- INTRODUÇÃO COM O GIF DO VINHO -->
<div class="environment-container">
<div class="environment-image">
<video autoplay loop muted playsinline src="img/etc/foods/wine.webm" style="pointer-events: none; max-width: 300px; border-radius: 8px;" alt="Wine pouring into a glass"></video>
</div>
<p class="spy-narrative" style="margin-top: 15px;">
You find Aunt Carol in the living room, a nearly empty bottle of red wine on the coffee table beside her. She's clearly had a few glasses already; there's a relaxed, almost giddy flush to her cheeks, and her eyes sparkle with a dangerously playful light when she sees you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Tipsy Face">
</div>
<div class="dialog-text carol"> <!-- Usando a classe de diálogo padrão -->
Heeeey there, handsome! Just... unwinding a little. This wine is *delicious*. You should try some... or maybe... you're delicious enough on your own?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Okay, she's definitely feeling that wine. And she's looking right through me. This could get... interesting.
</div>
</div>
<p class="spy-narrative">
She giggles, taking another sip from her glass, then sets it down with a deliberate slowness. Her gaze drifts down her own body, then back to you, a provocative smirk playing on her lips.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Playful Face">
</div>
<div class="dialog-text carol">
Soooo... you saw me in the bathroom earlier, right? When I was... you know... *freshening up*. You got a pretty good eyeful. Don't even try to deny it, I saw you scrambling away like a startled bunny.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Your face burns. She *knew*? Or is she just fishing because of the noise?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Teasing Face">
</div>
<div class="dialog-text carol">
Don't look so horrified, sweetie. A little curiosity never hurt anyone... much. So, tell me... what did you think? Of my... *assets*? Are they nice? Big enough for your tastes?
</div>
</div>
<p class="spy-narrative">
As she speaks, she leans forward slightly, her top (whatever she's wearing) shifting, and she subtly, or not so subtly, jiggles her chest.
</p>
<!-- VÍDEO 1: BALANÇANDO COM ROUPA - TAMANHO AJUSTADO -->
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 480px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/tease/alexapearl_boucing_tits_w_tshirt.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
The movement is hypnotic under the soft living room lights. Even through the fabric, their size and bounce are undeniably impressive. She watches your reaction, her eyes glinting.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Very Sly Face">
</div>
<div class="dialog-text carol">
But you know... fabric can be so... restrictive, don't you think? It hides all the best parts. Maybe you need a... clearer demonstration? For... scientific purposes, of course.
</div>
</div>
<p class="spy-narrative">
Before you can even process that, her hands go to her top. With a practiced, almost casual movement fueled by wine and audacity, she pulls it up and off, tossing it aside.
</p>
<!-- VÍDEO 2: BALANÇANDO SEM ROUPA - TAMANHO AJUSTADO -->
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 480px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/tease/alexapearl_boucing_tits_w_no_tshirt.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
And there they are. Full, round, and completely bare. She gives them another, more vigorous shake, her nipples hard and pointing right at you. A low chuckle rumbles in her chest. "See? Much better view, wouldn't you say? They *are* pretty magnificent, even if I do say so myself. Definitely a handful... or two."
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Holy... She's... just... Wow. I can't form words. My brain has officially short-circuited.
</div>
</div>
<p class="spy-narrative">
She holds your gaze for a long moment, letting you drink in the sight, the silence in the room thick with unspoken tension and the heavy scent of wine and her perfume.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "You manage a weak nod, completely flustered...">>
<<set $scenes["EveningWine"].status to 1>>
<<set $auntCarol.lust += 20>>
<<set $auntCarol.corruption += 15>>
<<set $auntCarol.love += 10>>
/* <<set $time += 1>> */
<<goto "SaturdayWineAftermath">>
<</link>>
<<link "She's drunk and exposed — force the moment">>
<<set $gameOverReason to "kickedOut">>
<<goto "GameOver">>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<video autoplay loop muted playsinline src="img/layout/house/opening_door.webm" style="pointer-events: none;" alt="Open Door"></video>
</div>
<p class="spy-narrative">
Aunt Carol pulls you into a warm embrace right there on the doorstep. She smells of her familiar perfume and something cooking inside. It feels like coming home.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
Oh, look at you! It's been so long! Come here, give your aunt a hug.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Hey, Aunt Carol! I've missed you.
</div>
</div>
<p class="spy-narrative">
Her embrace is warm, filled with the scent of her familiar perfume. It brings back memories of summers spent here.
</p>
<div class="image-sequence">
<div class="image-container">
<video autoplay loop muted playsinline src="img/chars/carol/etc/carol_hug.webm" style="pointer-events: none;" alt="Carol Hugging Player"></video>
<p class="image-caption">Aunt Carol shares a warm moment.</p>
</div>
</div>
<br>
<div class="game-choice">
<h3>How do you respond?</h3>
<div class="answer-options">
<<button "Hug her back warmly">>
<<replace "#response">>
<p id="response" class="positive-response">She smiles, clearly happy to see you.</p>
<<set $auntCarol.love += 5>>
<</replace>>
<</button>>
<<button "Act shy and reserved">>
<<replace "#response">>
<p id="response" class="neutral-response">She chuckles, patting your back.</p>
<</replace>>
<</button>>
</div>
<div id="response"></div>
</div>
<div class="menu-buttons">
<<set $scenes["Greeting"].status to 1>>
[[Continue->Arrival]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem da cozinha pela manhã/meio-dia, talvez com sol entrando -->
<img src="img/layout/kitchen/kitchen_small.jpg" alt="Kitchen - Bright Morning">
</div>
<p class="spy-narrative">
You finish wiping down the last of the counters after doing the dishes. The kitchen is quiet for a moment, filled with the bright morning/midday light. Suddenly, Aunt Carol bounces back into the room, humming a cheerful tune. Your eyes instinctively follow her. She's wearing a short, thin, silky nightgown that leaves little to the imagination... and it's quite clear she's wearing nothing underneath.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Rosto da Carol - Feliz, talvez um pouco sonolenta mas energizada -->
<img src="img/chars/carol/face/carol_face_energetic.jpg" alt="Carol Energetic/Happy Face">
</div>
<div class="dialog-text carol">
All clean! You really are a fantastic help, you know that? Makes my morning so much brighter! I feel like I could dance!
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Dance isn't quite the word I'd use for... that.
</div>
</div>
<p class="spy-narrative">
And "dance" she does, in her own way. She moves towards the coffee machine, her body full of a playful energy. She bounces lightly on the balls of her feet, reaching for a mug, seemingly oblivious – or perhaps pointedly aware – of the effect she's having.
</p>
<!-- O Vídeo Principal da Cena -->
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 640px; border-radius: 8px;" controls autoplay loop muted playsinline>
<source src="img/chars/carol/flirt/alexapearl_flirt_bouncing.webm" type="video/webm">
<!-- Adicione outros formatos se tiver, como MP4 -->
<!-- <source src="img/chars/carol/flirt/alexapearl_flirt_bouncing.webm" type="video/mp4"> -->
Your browser doesn't support embedded videos or the WEBM/MP4 format.
</video>
</div>
<p class="spy-narrative">
Every little bounce sends ripples through the thin fabric. Her breasts jiggle and sway freely, their weight and shape undeniable. The hardened tips of her nipples press insistently against the silk, creating exquisitely distracting focal points. She turns slightly, catching your wide-eyed stare, and her lips curve into a slow, knowing smirk.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Rosto da Carol - Provocante, divertida -->
<img src="img/chars/carol/face/carol_face_teasing.jpg" alt="Carol Teasing Face">
</div>
<div class="dialog-text carol">
What's the matter, sweetie? Cat got your tongue? Or maybe you just need some coffee to wake up? Seems like *I'm* wide awake this morning... maybe it's contagious?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I... uh... Coffee sounds good, Aunt Carol.
</div>
</div>
<p class="spy-narrative">
She laughs softly, a melodic sound that makes your stomach flutter, and turns back to the coffee machine, still moving with that same captivating rhythm. The air crackles with unspoken invitation.
</p>
<br>
<!-- Conclusão da Cena -->
<div class="menu-buttons">
<<set $scenes["KitchenFlirt"].status to 1>> /* Marca a cena como concluída */
<<set $auntCarol.love to $auntCarol.love + 10>> /* Recompensa de Love */
<<set $auntCarol.lust to $auntCarol.lust + 10>> /* Recompensa de Lust */
/* Cenas geralmente não avançam o tempo, a menos que envolvam uma ação específica */
[[Continue->SaturdayBreakfastChoice]] /* Retorna para a visão base da Cozinha */
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/dinner_table_01.jpg" alt="Dinner Table Set">
</div>
<p class="spy-narrative">
The kitchen is warm and inviting, the aroma of home-cooked food filling the air. The dinner table is set beautifully, a comforting sight after the journey.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
Took you long enough to get settled, sleepyhead! Trouble wrestling with your bags, were we? Dinner's getting cold, but knowing you, you'll devour it anyway.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Sorry, Aunt Carol, just getting my bearings. Wow, is that...?
</div>
</div>
<p class="spy-narrative">
Your eyes land on the steaming dish in the center of the table. It's your absolute favorite sandwich — Aunt Carol always knew how to make you feel at home.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
(Chuckles softly) Your favorite, just like always. I know how much you love my egg sandwich. Come on, sit down, don't just stand there gawking.
</div>
</div>
<p class="spy-narrative">
Aunt Carol gestures to a chair, then picks up her own fork. She starts to eat, and something in the way she moves catches my attention.
</p>
<div class="environment-container">
<div class="environment-image">
<video width="640" height="480" controls autoplay loop muted>
<source src="img/chars/carol/eating/carol_eating_001.webm" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
<p class="spy-narrative">
Her lips wrap around the fork, sucking in the noodles with a slow, deliberate motion. Her eyes meet mine over the rim of the fork, a playful smirk dancing on her lips. It's just eating... but the way she does it... it feels charged, suggestive.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
Something wrong, honey? You staring at your Aunt like you've never seen someone eat before? Or is it just *that* good?
</div>
</div>
<br>
<div class="menu-buttons">
<<set $scenes["KitchenPreparation"].status to 1>>
[[Continue->FridayBedtimePrelude]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem da sala de estar agora arrumada -->
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room - Tidy">
</div>
<p class="spy-narrative">
The living room looks much better now, tidy and refreshed thanks to your help. Aunt Carol beams, clearly pleased with the result. The atmosphere feels light and relaxed.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Rosto da Carol - Satisfeita, Alegre -->
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Pleased Face">
</div>
<div class="dialog-text carol">
See? Doesn't it feel so much nicer in here now? You really worked wonders, sweetie. All this tidiness... it puts me in such a good, energetic mood! Makes me want to put on some music!
</div>
</div>
<p class="spy-narrative">
Before you can really respond, she's already fiddling with her phone connected to a nearby speaker. A mischievous grin spreads across her face as a familiar, heavy beat fills the room – Nicki Minaj's "Anaconda". You notice she must have changed while you were busy; she's now wearing a pair of extremely tight, short athletic shorts. They hug her curves perfectly, and a deliberate-looking rip high up on the side of her left butt cheek offers a tantalizing glimpse of smooth, bare skin beneath.
</p>
<div class="dialog-container">
<div class="dialog-image">
<!-- Rosto da Carol - Brincalhona, talvez mordendo o lábio -->
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol Playful/Cheeky Face">
</div>
<div class="dialog-text carol">
(Laughing over the music) Oh, this song! Takes me back! It just makes you want to... move, doesn't it? Remember how everyone tried to do that dance? It looked so silly... or maybe... fun?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Fun isn't exactly the first word that comes to mind right now... Is she seriously going to...?
</div>
</div>
<!-- O Vídeo Principal da Cena -->
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<source src="img/chars/carol/tease/alexapearl_twerk_2.webm" type="video/webm">
<!-- <source src="img/chars/carol/tease/alexapearl_twerk_2.webm" type="video/mp4"> -->
Your browser doesn't support embedded videos or the WEBM/MP4 format.
</video>
</div>
<p class="spy-narrative">
And then, turning so her back is mostly towards you, she does. She bends forward slightly, placing her hands on her thighs, and begins to move her hips to the insistent beat. It starts as almost a joke, a playful wiggle, but quickly becomes more deliberate, more fluid, undeniably sensual. Her backside moves with hypnotic rhythm, the tight shorts emphasizing every curve and jiggle. The tear in the fabric shifts with each movement, offering brief, pulse-pounding flashes of bare skin. She glances back over her shoulder, eyes locking with yours for a second, a sultry, challenging smirk playing on her lips before she turns her attention back to her provocative dance. The "playful" facade seems to be melting away rapidly.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Rosto da Carol - Seductive, Smirk -->
<img src="img/chars/carol/face/carol_face_energetic.jpg" alt="Carol Seductive Smirk Face">
</div>
<div class="dialog-text carol">
(Slightly breathless, turning back around) Phew! Okay, maybe I got a little carried away. This song still gets me going! Did you... enjoy the show? Or am I just embarrassing myself? Be honest!
</div>
</div>
<p class="spy-narrative">
Her question hangs in the air, heavy with implication. She fans herself lightly, but her eyes stay fixed on you, waiting for a reaction. The energy in the tidy living room is now anything but calm.
</p>
<br>
<!-- Conclusão da Cena -->
<div class="menu-buttons">
<<set $scenes["LivingRoomInteraction"].status to 1>> /* Marca a cena como concluída */
<<set $auntCarol.love to $auntCarol.love + 10>> /* Recompensa de Love */
<<set $auntCarol.lust to $auntCarol.lust + 10>> /* Recompensa de Lust */
/* Cenas geralmente não avançam o tempo */
[[Continue->SaturdayAfternoonNarrative]] /* Retorna para a visão base da Sala */
</div>
</div><div class="game-container spy-scene-container"> <!-- Reutilizando a classe base para o container da cena -->
<!-- PARTE 1: O DESPERTAR CONFUSO -->
<div class="environment-container">
<p class="spy-narrative" style="margin-top: 15px; font-size: 1.1em;">
Sunlight streams weakly into your room as you begin to stir. Grogginess clings to you, the events of last night a hazy, yet intensely vivid, series of flashes in your mind. You try to open your eyes, a strange warmth pressing against your lower body...
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Confused)">
</div>
<div class="dialog-text player">
(Groaning internally) Ugh... what time is it? What was that dream... or was it a dream? Something feels... heavy.
</div>
</div>
<p class="spy-narrative">
You crack your eyes open to see Aunt Carol already in your room, perched on the edge of your bed. She's dressed in a tight workout top and shorts, already looking energized. She's humming to herself, applying some kind of lotion to her arms and chest, seemingly oblivious to your stirring.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Energetic Face">
</div>
<div class="dialog-text carol">
Morning, sleepyhead! Rise and shine! Just getting ready for a quick workout, gotta keep this body in shape, you know? This new lotion smells amazing, makes the skin so... receptive.
</div>
</div>
<p class="spy-narrative">
Her words barely register. You're still trying to shake off the sleep, and that persistent, warm pressure... You blink, trying to focus, and as your vision clears, the world lurches.
</p>
<!-- VÍDEO PRINCIPAL: TITSJOB COM ROUPA E FINALIZAÇÃO -->
<div class="changing-video-container" style="text-align: center;"> <!-- Centraliza o vídeo -->
<video controls autoplay loop muted playsinline style="max-width: 540px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/titjob/alexapearl_titjob_w_clothes.webm" type="video/webm">
<!-- Adicione .webm se tiver -->
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Somehow, while you were half-asleep, she had maneuvered your morning wood. It's now nestled snugly between her surprisingly ample breasts, still partially covered by her tight sports top. Her hands are cupping her own cleavage, pressing her flesh firmly around your shaft, and she's begun to move, a slow, rhythmic friction that sends jolts of pure, unadulterated pleasure straight to your groin. Her eyes are closed, a faint smile on her lips, as if lost in the sensation just as much as you are.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Shocked/Aroused)">
</div>
<div class="dialog-text player">
(Thinking) WHAT THE FU--?! How... When...?! This is... This is happening. Right now.
</div>
</div>
<p class="spy-narrative">
The sensation is overwhelming. The warmth of her skin, the soft pressure of her breasts, the subtle scent of lotion and her own musky arousal... it's too much. You gasp as the climax hits you like a freight train, a hot, thick release pulsing between her breasts, soaking the inside of her top.
She opens her eyes, looking down with a satisfied, almost predatory expression. Without a word, she pulls the fabric of her top away, revealing your sticky mess coating her cleavage. She studies it for a moment, then gives you a slow, deliberate wink.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Smirking Face">
</div>
<div class="dialog-text carol">
(Chuckles softly) Well, that's one way to start the day. Hope you enjoyed your... *protein shake*. Now, I really should get to that workout. Don't be late for breakfast, sweetie.
</div>
</div>
<p class="spy-narrative">
And just like that, as if nothing extraordinary just occurred, she slips off the bed, gives her top a cursory wipe, and saunters out of your room, leaving you breathless, sticky, and utterly bewildered by the force of nature that is your Aunt Carol.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Try to pick your jaw up off the floor...">>
<<set $scenes["MorningTitsjob"].status to 1>>
<<set $auntCarol.lust += 35>>
<<set $auntCarol.corruption += 15>>
<<set $auntCarol.love += 20>>
<<set $player.lust to 20>>
<<set $player.energy -= 5>> /* Orgasmos gastam uma energia do caralho, né? */
/* Avançar o tempo um pouco, já que "aconteceu" algo */
<<set $time += 1>>
<<if $time >= 24>> /* Caso vire o dia, mas improvável aqui */
<<set $time -= 24>>
/* Lógica de avançar o dia se necessário */
<</if>>
<<goto "ChangeLightbulb">>
<</link>>
</div>
</div><div class="game-container spy-scene-container"> <!-- Reutilizando a classe base para o container da cena -->
<!-- PARTE 1: O CONVITE INDECENTE -->
<div class="environment-container">
<p class="spy-narrative" style="margin-top: 15px;">
Later that night, after the evening's... *festivities*... you feel compelled to wish Aunt Carol a proper goodnight. You find her in her bedroom, already changed into a loose, silky nightgown that clings suggestively to her curves as she moves. The room is dimly lit, a single lamp casting long, inviting shadows. She turns as you enter, that sly, wine-fueled smile still playing on her lips.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Anticipating Face">
</div>
<div class="dialog-text carol">
Well, well, look who decided to pay a little night visit. Coming to tuck your old auntie in? Or perhaps... you had something else in mind after my little... *performance* earlier?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Nervously) I... uh... just wanted to say goodnight, Aunt Carol.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Demanding Face">
</div>
<div class="dialog-text carol">
Goodnight? Oh, I think we can do a little better than just "goodnight," don't you? After all the... *revelations* today, I think it's only fair you show me what *you've* been hiding under those pants of yours. Come on, don't be shy. Auntie Carol wants to see.
</div>
</div>
<p class="spy-narrative">
Your protests are weak, easily brushed aside by her intoxicating mix of playful demand and a predatory glint in her eyes. Before you know it, your pants are around your ankles, and your rapidly hardening erection is on full display under her hungry gaze.
</p>
<!-- VÍDEO 1: HANDJOB -->
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 520px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/handjob/alexapearl_handjob_no_cum.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She doesn't hesitate. Her warm hand instantly closes around your shaft, her touch surprisingly firm and knowing. She begins to stroke you, slowly at first, then with increasing confidence, her eyes locked on yours, a triumphant smirk on her face.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Pleased Face">
</div>
<div class="dialog-text carol">
(Whispering huskily) Mmm, there we go... Much bigger than I imagined, sweetie. You've been holding out on your poor aunt. This will be our little secret, okay? If your mother or father ever found out about this... well, let's just say I'd be in a world of trouble. But some secrets are worth keeping, don't you think?
</div>
</div>
<p class="spy-narrative">
Her pace quickens, her thumb expertly teasing the head of your cock. You groan, close to the edge, but just as you think you're about to lose control, she abruptly stops, her hand still wrapped around you, pulsing gently.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Dismissive Face">
</div>
<div class="dialog-text carol">
(A light pat on your thigh) Alright, that's enough excitement for one night. Wouldn't want to tire you out completely on your first *real* night. Off to bed with you now, little nephew. Sweet dreams.
</div>
</div>
<p class="spy-narrative">
She releases you, leaving you aching and bewildered. Before you can say anything, she gently pushes you towards the door. As you step out, still trying to process what just happened, you hear the distinct *click* of her bedroom door locking behind you.
</p>
<hr style="border-color: rgba(200, 180, 220, 0.2); margin: 25px 0;">
<!-- PARTE 2: A ESPIADA PELA FECHADURA -->
<p class="spy-narrative">
Your mind is reeling. She locked the door? Curiosity, and a desperate need for some kind of... closure, perhaps, gets the better of you. You notice the old-fashioned keyhole on her door. Hesitantly, you lean down and peer through it.
</p>
<div class="changing-video-container" style="text-align: center;"> <!-- Mesmo container, talvez um pouco menor se o vídeo for mais focado -->
<video controls autoplay loop muted playsinline style="max-width: 400px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/solo/alexapearl_bed_w_masturbation.webm" type="video/webm">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
The view is limited, but you see enough. Aunt Carol is back on her bed, her nightgown hiked up around her waist. Her eyes are closed, a look of intense concentration on her face as her hand moves rhythmically between her legs, a sleek vibrator clutched within. A soft moan escapes her lips. It seems your little... *interaction*... left her wanting more as well. You watch for a few more electrifying seconds before pulling away, your own arousal reignited, mixed with a potent cocktail of guilt and exhilaration.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Jesus Christ... She... What is even happening anymore? I need to get to my room.
</div>
</div>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Retreat to your room, utterly shell-shocked...">>
<<set $scenes["BedroomHandjob"].status to 1>>
<<set $auntCarol.lust += 30>>
<<set $auntCarol.corruption += 10>>
<<set $auntCarol.love += 15>>
<<set $player.lust += 15>> /* O jogador também fica no tesão, porra! */
<<goto "MidnightBedroomCarol">>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem da piscina agora limpa, sol forte do meio-dia -->
<img src="img/layout/pool/pool_sunny_clean.webp" alt="Pool - Sunny and Clean">
</div>
<p class="spy-narrative">
With the pool sparkling clean thanks to your efforts, the midday sun feels even more intense. You step back to admire your work, and notice Aunt Carol getting comfortable on one of the lounge chairs positioned perfectly in the sun. She sighs contentedly, laying out her towel.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Rosto da Carol - Relaxada, talvez com óculos de sol no início -->
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Relaxed Face in Sun">
</div>
<div class="dialog-text carol">
Much better! Thanks again, sweetie. Now, if you'll excuse me, I'm going to catch some rays... Feel free to relax too, don't just stand there hovering unless you plan on offering oil massages? She winks playfully before settling down.
</div>
</div>
<p class="spy-narrative">
You watch as she lies down on her stomach, facing away from you. With a casual, practiced motion, she reaches behind her back and unties the strings of her bikini top, letting it fall loosely beside her on the towel. She adjusts herself slightly, getting comfortable, her entire back now bare and exposed to the warm sun.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Okay... she definitely just took her top off. Right in front of me. Should I look away? ...Probably. Am I going to? ...Probably not.
</div>
</div>
<!-- O Vídeo Principal da Cena -->
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 640px; border-radius: 8px;" controls autoplay loop muted playsinline>
<source src="img/chars/carol/sunbathing/alexapearl_sunbathing.webm" type="video/webm">
<!-- <source src="img/chars/carol/sunbathing/alexapearl_sunbathing.webm" type="video/mp4"> -->
Your browser doesn't support embedded videos or the WEBM/MP4 format.
</video>
</div>
<p class="spy-narrative">
You stand there, pretending to check your phone or gaze at the distant trees, but your eyes keep drifting back to her. The sun highlights the smooth skin of her back, the gentle curve of her spine leading down to the slight swell of her hips barely contained by her bikini bottoms. She stretches languidly, like a cat, then casually spreads her legs wider on the lounger, tapping her foot rhythmically. For a fleeting moment, as if adjusting her position, she shifts, lifting her torso slightly... offering a brief, heart-stopping glimpse of the side and underside curve of one of her breasts, the soft shadow beneath, before settling back down. Was that accidental? With Aunt Carol, it's getting harder to tell... and harder to look away.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Rosto da Carol - Aqui poderia ser uma imagem dela deitada de lado, ou apenas manter o rosto anterior -->
<img src="img/chars/carol/face/carol_face_relaxed_sun.jpg" alt="Carol Relaxed Face in Sun">
</div>
<div class="dialog-text carol">
(Muffled slightly by the towel) Mmm, this sun feels amazing... You finding a good spot to relax too, honey?
</div>
</div>
<p class="spy-narrative">
Her voice sounds lazy, relaxed, maybe even a little seductive. She doesn't turn around, leaving you to your observations.
</p>
<br>
<!-- Conclusão da Cena -->
<div class="menu-buttons">
<<set $scenes["PoolsideRelaxation"].status to 1>> /* Marca a cena como concluída */
<<set $auntCarol.lust to $auntCarol.lust + 20>> /* Recompensa de Lust (para Carol) */
<<set $auntCarol.corruption to $auntCarol.corruption + 10>> /* Recompensa de Corrupção (para Carol) */
/* Cenas de observação não avançam o tempo */
[[Continue->DeletePhotos]] /* Retorna para a visão base da Piscina */
</div>
</div><div class="game-container spy-scene-container">
<div class="changing-scene-stage" id="stage-0">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem do quarto, talvez Carol segurando uns biquínis -->
<img src="img/layout/bedroom_carol/bedroom_carol_holding_clothes.jpg" alt="Carol holding clothes in her bedroom">
</div>
<p class="spy-narrative">
After you successfully found her scarf (or whatever she asked for), Aunt Carol gives you a bright, appreciative smile. Her eyes linger on you for a moment before glancing towards a pile of colourful swimwear on her bed.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_thinking.jpg" alt="Carol Thinking Face">
</div>
<div class="dialog-text carol">
You know, while you're here... I was thinking of sorting out my swimwear for the summer. I bought a few new bikinis online, but I'm never sure how they actually look *on*. Would you mind giving me your honest opinion? It's so hard to judge by yourself in the mirror.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Give my opinion on Aunt Carol in bikinis? Is she serious? ...Okay, deep breaths.
(Aloud) Uh, sure, Aunt Carol. If you think my opinion would help, I guess I can... take a look.
</div>
</div>
<div class="menu-buttons" style="margin-top: 20px;">
<<link "Wait for her to try the first one..." >>
<<goto "WardrobeHelpScene_Stage1">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<div class="changing-scene-stage" id="stage-1">
<p class="spy-narrative">
She ducks behind a privacy screen (or into the ensuite bathroom briefly - adapt as needed) and emerges a moment later wearing a simple, elegant black bikini. She walks towards you, turning slowly.
</p>
<div class="changing-video-container">
<video controls autoplay loop muted playsinline>
<source src="img/chars/carol/change_clothes/alexapearl_changing_bikini_black.webm" type="video/mp4">
<!-- Adicione .webm se tiver -->
Your browser doesn't support embedded videos.
</video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_posing_1.jpg" alt="Carol Posing Face">
</div>
<div class="dialog-text carol">
So? What do you think of this one? Classic black. Is it too... boring? Or does it suit me?
</div>
</div>
<p class="player-reaction">It looks good. Very... classy. But maybe a little safe compared to what you imagined.</p>
<div class="menu-buttons">
<<link "'It looks great, very elegant.'">>
<<goto "WardrobeHelpScene_Stage2">>
<</link>>
<<link "'Hmm, it's nice, but maybe something with more color?'">>
<<set $auntCarol.lust += 2>> /* Pequeno bônus por pedir algo mais ousado */
<<goto "WardrobeHelpScene_Stage2">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<div class="changing-scene-stage" id="stage-2">
<p class="spy-narrative">
She nods at your comment. "Okay, good feedback. Let me try the red one then, it's a bit bolder." She disappears again briefly and returns in a vibrant red bikini. This one definitely has less fabric, cut higher on the hips and lower on the chest.
</p>
<div class="changing-video-container">
<video controls autoplay loop muted playsinline>
<source src="img/chars/carol/change_clothes/alexapearl_changing_bikini_red.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_posing_2.jpg" alt="Carol Confident Posing Face">
</div>
<div class="dialog-text carol">
Now *this* one feels a bit more fun! Does the red work on me? Is it... too much? Or just enough?
</div>
</div>
<p class="player-reaction">Okay, wow. That definitely catches the eye. It leaves much less to the imagination, hugging her figure tightly. Your throat feels a bit dry.</p>
<div class="menu-buttons">
<<link "'Wow, Aunt Carol! That red looks amazing on you!'">>
<<set $auntCarol.love += 3>>
<<goto "WardrobeHelpScene_Stage3">>
<</link>>
<<link "'It's... very red. Definitely makes a statement.'">>
<<goto "WardrobeHelpScene_Stage3">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<div class="changing-scene-stage" id="stage-3">
<p class="spy-narrative">
"Right? Okay, one more then. This blue one is... well, you'll see." She vanishes and reappears. This 'bikini' is barely there – tiny triangles of blue fabric connected by thin strings. It looks at least a size too small, pressing into her soft flesh and causing her ample breasts to spill generously over the top edges.
</p>
<div class="changing-video-container">
<video controls autoplay loop muted playsinline>
<source src="img/chars/carol/change_clothes/alexapearl_changing_bikini_blue.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_posing_3.jpg" alt="Carol Provocative Posing Face">
</div>
<div class="dialog-text carol">
(Biting her lip slightly) Okay, this one... might be a *bit* much even for me. Or maybe it's perfect for catching attention? What's the verdict, judge?
</div>
</div>
<p class="player-reaction">Your jaw is practically on the floor. It's incredibly revealing, borderline indecent. You can clearly see the outline and hardness of her nipples straining against the thin material.</p>
<p class="spy-narrative" style="margin-top:15px;">
Before you can even stammer out a response, she sighs dramatically. "Ugh, this top is actually really uncomfortable." And with startling casualness, right there in front of you, she reaches behind her neck, unties the string, and simply lets the tiny blue top fall away, tossing it onto the bed. She stands there completely topless for a beat, stretching slightly, then gives one of her breasts a thoughtful little squeeze and adjustment, as if checking something, all while seemingly ignoring your stunned presence.
</p>
<p class="player-reaction">You can't breathe. You stare, transfixed, at her full, bare breasts, the dark aureoles, the hard nipples pointing almost accusingly at you.</p>
<div class="menu-buttons">
<<link "(Remain frozen, unable to speak)">>
<<set $auntCarol.corruption += 5>> /* Corrupção aumenta com a nudez */
<<goto "WardrobeHelpScene_Stage4">>
<</link>>
<<link "(Manage to look away, blushing furiously)">>
<<goto "WardrobeHelpScene_Stage4">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<div class="changing-scene-stage" id="stage-4">
<p class="spy-narrative">
She finally seems to notice your reaction, or perhaps just decides she's done teasing for now. She picks up a pair of jeans from the bed, keeping her back to you. She quickly slips off the tiny blue bikini bottoms, tossing them aside, and steps into a fresh pair of simple panties (or maybe none? it's hard to tell from this angle). Then, still topless, she begins the mesmerizing process of shimmying into the tight jeans.
</p>
<div class="changing-video-container">
<video controls autoplay loop muted playsinline>
<source src="img/chars/carol/change_clothes/alexapearl_changing_jeans.webm" type="video/webm">
<!-- Adicione MP4 se tiver -->
Your browser doesn't support embedded videos.
</video>
</div>
<p class="player-reaction">Watching her work the denim up over her bare hips and backside is almost as provocative as the bikinis were. The way the fabric molds to her curves...</p>
<div class="dialog-container" style="margin-top: 15px;">
<div class="dialog-image">
<!-- Sem imagem de rosto aqui, ela está de costas -->
<img src="img/layout/bedroom_carol/bedroom_wardrobe_back_view.jpg" alt="Carol's back view"> <!-- Placeholder -->
</div>
<div class="dialog-text carol">
(Her voice cheerful, still facing away as she buttons the jeans) Phew, that's better! Jeans always feel more practical. You still here, sweetie? You've been a great help with the bikinis, gave me lots to think about! Thanks again! Think I'm done playing dress-up for now.
</div>
</div>
<p class="spy-narrative">
She doesn't turn around, effectively dismissing you while finishing getting dressed. It feels like a whirlwind just happened.
</p>
<div class="menu-buttons">
<!-- Conclusão Final da Cena -->
<<link "Take the hint and leave the room...">>
<<set $scenes["WardrobeHelp"].status to 1>> /* Marca a cena inteira como concluída */
<<set $auntCarol.love += 10>> /* Recompensa base da cena */
<<set $auntCarol.lust += 20>> /* Recompensa de Lust alta devido à nudez/tease */
<<set $auntCarol.corruption += 10>> /* Corrupção base + bônus já aplicado */
<<set $time += 1>>
<<goto "AskPackagePickup">>
<</link>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Reach the High Shelf</p>
<p class="mission-narrative-focus">The private reading room was yours. Then she walked in, yellow dress, reaching for a spine she cannot get.</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.libraryGirl.face" alt="Fiona"></div>
<div class="dialog-text fiona">Sorry. I didn't think anyone used this room. It's too high — could you...?</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll get the chair. Hold still.</div>
</div>
<p class="spy-narrative">You are still holding the book you were reading. Helping her is the whole job. For a second.</p>
<div class="menu-buttons">
<<link "Help her reach it">>
<<set $randomEncounters.libraryGirl.missions.highShelf.status to 1>>
<<run window.AWAC.applyReward({ lust: 3 })>>
<<goto "FionaLibraryStacks">>
<</link>>
<<link "Go back to your book">><<goto "Library">><</link>>
</div>
</div><div class="game-container spy-scene-container">
<div id="fiona-library-content"></div>
</div><<approachCharacter "randomEncounters.libraryGirl">><<silently>>
<<set _approach to [
"The quiet room door is cracked. She is already reaching.",
"She puts a finger to her lips when you come in. Same shelf.",
"\"I 'lost' the title again,\" she whispers."
].random()>>
<<set _during to [
"The chair. The bookcase. The dress that was never going to stay a dress.",
"You were supposed to be reading. You are not reading.",
"Paper, dust, her breath against the shelves."
].random()>>
<<set _outcome to [
"She picks the book up off the floor like that was the point.",
"\"If Elise asks, I was in periodicals.\"",
"She leaves first. You sit back down with a book you cannot see."
].random()>>
<<set _video to $scenes["LS001"].replay.videos.random()>>
<<applyReplay "LS001">>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Fiona" style="max-width: 640px; border-radius: 8px;">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the library->Library]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
A clean, modern bathroom. There are two sinks, but only one seems to get regular use. A subtle reminder of her husband's absence.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bathroom.jpg" alt="Jenna's modern and clean bathroom">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BathroomJenna">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The bathroom is empty right now. Just the echo of silence.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Bathroom->JennaHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Her bedroom. A huge bed dominates the room, but it feels empty. There's a picture of her and a man in military uniform on the nightstand. Her husband, I guess.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna's neat and lonely bedroom">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BedroomJenna">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The bedroom is empty right now. Just the silence of an empty space.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Bedroom->JennaHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Her garden is simple but very well-kept. Looks like she spends a lot of time out here, maybe to keep her mind off things.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/garden.jpg" alt="Jenna's peaceful and tidy garden">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "GardenJenna">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The garden is empty right now. Just the quiet of nature.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Garden->JennaHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Her kitchen is practical and well-stocked with healthy foods and protein powders. Definitely the kitchen of someone who works out.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/kitchen.jpg" alt="Jenna's clean and healthy kitchen">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "KitchenJenna">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The kitchen is empty right now. Just the scent of protein powder.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Kitchen->JennaHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Jenna's living room is cozy and comfortable. A large TV dominates one wall, and a few fitness magazines are neatly stacked on the coffee table.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna's cozy and modern living room">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "LivingRoomJenna">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The living room is empty right now. Just the hum of the TV.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Living Room->JennaHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
A nice, simple pool. It's clean and looks like a great place to work out or just relax in private.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/pool.jpg" alt="Jenna's private pool">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "PoolJenna">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The pool is empty right now. Just the ripple of water.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Pool Area->JennaHouse]]
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 3) + 1>>
<<silently>>
<<set $openWorldGirls.jenna.dailyInteractions.coffee += 1>>
<<set $openWorldGirls.jenna.love += $openWorldGirls.jenna.interactions.coffee.stats.love>>
<<set $openWorldGirls.jenna.loneliness += $openWorldGirls.jenna.interactions.coffee.stats.loneliness>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
jenna: "I just made a fresh pot of coffee. Would you like a cup? It's nice to share it with someone.",
player: "I'd love one, thanks."
},
{
jenna: "It's funny, I always make a full pot out of habit... even though it's just me. I'm glad you're here to have some.",
player: "My pleasure. It smells great."
},
{
jenna: "Care for some coffee? It's the one thing I can't start my day without... well, that and my yoga.",
player: "Definitely. Thanks, Jenna."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.jenna.face" alt="Jenna's Face">
</div>
<div class="dialog-text jenna">
<<= _randomDialogue.jenna >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _imagePath to "img/chars/jenna/coffee/jenna_coffee_" + _randomNumber + ".jpg">>
<img @src="_imagePath" alt="Jenna with a cup of coffee" style="max-width: 580px; border-radius: 8px;">
</div>
<p class="spy-narrative">
She pours you a cup, her movements graceful. Sitting down with you for a simple cup of coffee seems to visibly ease some of the tension in her shoulders.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 4) + 1>>
<<silently>>
<<set $openWorldGirls.jenna.dailyInteractions.flirt += 1>>
<<set $openWorldGirls.jenna.love += $openWorldGirls.jenna.interactions.flirt.stats.love>>
<<set $openWorldGirls.jenna.lust += $openWorldGirls.jenna.interactions.flirt.stats.lust>>
<<set $openWorldGirls.jenna.corruption += $openWorldGirls.jenna.interactions.flirt.stats.corruption>>
<<set $openWorldGirls.jenna.loneliness += $openWorldGirls.jenna.interactions.flirt.stats.loneliness>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
jenna: "You've been working out, haven't you? It's... noticeable. In a good way.",
player: "Just trying to keep up. You set a high bar."
},
{
jenna: "It's been a while since I've had a man around the house who's... so attentive.",
player: "I'm happy to help out wherever I can."
},
{
jenna: "My husband always says I shouldn't be so friendly with strangers... but you don't feel like a stranger.",
player: "I'm glad you feel comfortable around me."
},
{
jenna: "You have a nice smile. It... brightens up the room.",
player: "You've got a great one too."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.jenna.face" alt="Jenna's Face">
</div>
<div class="dialog-text jenna">
<<= _randomDialogue.jenna >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/jenna/flirt/jenna_flirt_" + _randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
A faint blush colors her cheeks, and she quickly looks away, a shy but pleased smile playing on her lips.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 4) + 1>>
<<silently>>
<<set $openWorldGirls.jenna.dailyInteractions.talk += 1>>
<<set $openWorldGirls.jenna.love += $openWorldGirls.jenna.interactions.talk.stats.love>>
<<set $openWorldGirls.jenna.loneliness += $openWorldGirls.jenna.interactions.talk.stats.loneliness>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
jenna: "Oh, hello. I was just... thinking about my to-do list for the day.",
player: "You seem very organized."
},
{
jenna: "It's so quiet in this house sometimes, isn't it? I almost forget what it's like to have someone to talk to.",
player: "It must get pretty lonely."
},
{
jenna: "Just trying to stay busy. It's the best way to make the time pass faster.",
player: "I get that. Keeping a routine helps."
},
{
jenna: "It's... nice to see another person. Breaks up the monotony of the day.",
player: "I'm happy to provide a distraction."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.jenna.face" alt="Jenna's Face">
</div>
<div class="dialog-text jenna">
<<= _randomDialogue.jenna >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/jenna/talk/jenna_talk_" + _randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Jenna offers a small, polite smile, seeming genuinely appreciative of the simple conversation.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">Jenna's Home</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/jenna_house_preview.jpg" alt="Jenna's modern and tidy, but slightly lonely-looking home">
</div>
</div>
<p class="hub-description">
This is Jenna's house. It's modern, clean, and well-maintained, but there's an air of stillness about it, a quietness that speaks of a home often occupied by only one. It feels... lonely.
</p>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">
[[Living Room|LivingRoomJenna]]
</div>
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna's Living Room">
</div>
<div class="location-item">
<div class="location-overlay">
[[Kitchen|KitchenJenna]]
</div>
<img src="img/layout/jenna_house/kitchen.jpg" alt="Jenna's Kitchen">
</div>
<div class="location-item">
<div class="location-overlay">
[[Bedroom|BedroomJenna]]
</div>
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna's Bedroom">
</div>
<div class="location-item">
<div class="location-overlay">
[[Bathroom|BathroomJenna]]
</div>
<img src="img/layout/jenna_house/bathroom.jpg" alt="Jenna's Bathroom">
</div>
<div class="location-item">
<div class="location-overlay">
[[Garden|GardenJenna]]
</div>
<img src="img/layout/jenna_house/garden.jpg" alt="Jenna's Garden">
</div>
<div class="location-item">
<div class="location-overlay">
[[Pool Area|PoolJenna]]
</div>
<img src="img/layout/jenna_house/pool.jpg" alt="Jenna's Pool">
</div>
<div class="location-item">
<div class="location-overlay">
[[Leave to Neighborhood|Neighborhood]]
</div>
<img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="Leave to Neighborhood">
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Fix a Stuck Window
</p>
<div class="environment-container">
<p class="mission-narrative-focus" style="margin-top:10px;">
The ask feels closer than usual — personal, a little vulnerable. She hesitates, then meets your eyes.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face" />
</div>
<div class="dialog-text jenna">
"I have a slightly awkward favor. My bedroom window is stuck. With the heat, it gets so stuffy at night. Could you... take a look? You were so good with the bike, I thought..."
</div>
</div>
<div class="environment-container" style="margin-top:10px;">
<p class="mission-narrative-focus">
You step into her room. It’s immaculate — lavender in the air, smooth sheets, everything softly feminine and carefully kept. You walk to the window; the frame looks swollen from the heat.
</p>
<p class="mission-narrative-focus" style="text-align:center; margin-top:8px;">
<a href="javascript:void(0)" class="link-invoke" onclick="window.jwindowStart({content: document})">Try to open the stuck window.</a>
</p>
</div>
<div class="game-challenge jwindow-challenge">
<div id="jwindow-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Fix Jenna's Bike
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/etc/others/broken_bike.jpg" alt="Broken bike pedal" />
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
The garden is quiet, just wind and the tick of a chain against metal. Jenna stands over a bike with a loose pedal, brows knit — stubbornly trying to fix it alone.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face" />
</div>
<div class="dialog-text jenna">
"It keeps slipping. I know it’s dumb… I just hate asking for help." She exhales, half embarrassed, half relieved. "If you know what you’re doing… I’d appreciate it."
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face" />
</div>
<div class="dialog-text player">
"Let me take a look. Easy fix if we follow the right steps."
</div>
</div>
<div class="game-challenge jbike-challenge">
<div id="jbike-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Help Tidy Jenna's Garden
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/jenna/tease/jenna_at_garden.jpg" alt="Jenna watering plants with a hose" />
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Sun-warm air. The hose hisses. Jenna’s denim clings as she waters the beds, a smile flickering when you show up with sleeves rolled.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face" />
</div>
<div class="dialog-text jenna">
"I could use a strong pair of hands. Just some weeding, hauling a soil bag, moving a planter. Nothing you can’t handle… right?"
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face" />
</div>
<div class="dialog-text player">
"Point me at the problems. I’ll make them lighter."
</div>
</div>
<div class="game-challenge jgarden-challenge">
<div id="jgarden-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Post-Workout Shake
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/jenna/tease/jenna_kitchen_egg.jpg" alt="Jenna in the kitchen holding eggs and peanut butter" />
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
The kitchen smells like vanilla protein and sunlight. Jenna leans on the counter, a playful challenge in her eyes — and a jar of peanut butter in her hand.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face" />
</div>
<div class="dialog-text jenna">
"I make this after every workout. Want to try it my way? It’s simple… if you pay attention."
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face" />
</div>
<div class="dialog-text player">
"Give me the order. I’ll do it right."
</div>
</div>
<div class="game-challenge jshake-challenge">
<div id="jshake-content"></div>
</div>
</div>
/* JENNA PHASE 2 MISSIONS START */<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Form Check at the Gym</p>
<p class="mission-narrative-focus">Gym floor, mid-set. She wants a real spotter — form cues that land soft, not silent staring.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Do I look okay doing this? Be honest. Not mean. Just... useful.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Brace, depth, finish. I will cue what you are doing right.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jgymspot-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Depth and Focus</p>
<p class="mission-narrative-focus">Second gym session. She freezes when she overthinks — match the right fix to each form glitch.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Tell me what to fix. If you go quiet I spiral.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I call the issue. You fix it. No ego lifts.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jgymdepth-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Mat Partner</p>
<p class="mission-narrative-focus">Morning living room. She wants a partner who can match breath to pose — not a silent audience.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Stay on the mat. Match my breath to the shape. Please do not make it weird if I shake.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Pose and breath. I will keep the pair honest.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jmatsync-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: One Last Pose</p>
<p class="mission-narrative-focus">Different beat: the room, the door, the water — then clear words. This is the consent gate before yoga cardio, not another stretch sequence.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">If we keep going it will not be yoga. Help me set the room first. Then say it out loud.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Mat, door, water. Then I tell you I want you — on your terms.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jlastpose-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Soft Layers</p>
<p class="mission-narrative-focus">Bedroom lamp. Lace. She needs the look named without turning it into a punchline.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Is this too much? I can change. Just... tell me if I look like myself.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Soft and perfect. You look like you tonight.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jsoftlayers-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: After the Shower</p>
<p class="mission-narrative-focus">Steam, towel, a binary that matters: stay with soft eyes, or leave and spike her loneliness.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">You can go. Or stay. I will not beg either way.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I am not leaving casually. Not when you look like that and mean it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jaftershower-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Bare in the Garden</p>
<p class="mission-narrative-focus">Afternoon garden. Bold ask: eyes on her, honesty and respect dialed in — not a joke for the neighbors.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">If I stand like this... will you still look at my face after?</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Warm. Honest. Respectful. I can hold all three.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jbaregarden-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Footsteps in the Hall</p>
<p class="mission-narrative-focus">Night house. Soft sounds from the bath wing. Find the proof she left the door open on purpose.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">(From the hall, almost a whisper) If you are out there... do not scare me. Just... notice.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Soft steps. I am looking carefully.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jfootsteps-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Reflection Check</p>
<p class="mission-narrative-focus">Bathroom mirror. She wants honesty about being seen — not a performance lecture.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">You saw me. Say what that means without making me small.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">It means I stay careful. And I do not look away.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jreflection-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: No Pretending</p>
<p class="mission-narrative-focus">The almost-caught moment. Soft landing first — then she may invite a real bathroom tease.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Do not pretend that was nothing. But also... do not treat me like a show you own.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">It mattered. I am still soft with you.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jnopretend-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Busy and Lonely</p>
<p class="mission-narrative-focus">Desk, yellow light, busy-work that is really waiting. Notice what she wore without being asked.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">I was just... organizing. You do not have to say anything.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I will notice without making it weird.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jbusylonely-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Fight or Soften</p>
<p class="mission-narrative-focus">Purple blouse, frayed nerves. Lower heat with soft truth — not silence, not a power play.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">I am not mad at you. I am mad at the empty house. Do not fight me back.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I will lower the temperature. Not the honesty.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jfightor-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Don't Just Stand There</p>
<p class="mission-narrative-focus">She is bent over busywork and waiting for action that still says why. Act and name it.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Do not just stand there staring. Either help or tell me what you want from me.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I will move. And I will say it clean.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jdontstand-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Breakfast Look</p>
<p class="mission-narrative-focus">Kitchen morning. Lingerie under domestic — she needs a mirror check that is kind and specific.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Is this ridiculous for breakfast? Be sweet if you can.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Not ridiculous. Intentional. You look incredible.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jbreakfast-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Dress Rehearsal</p>
<p class="mission-narrative-focus">Red dress in the kitchen light. Rate boldness and care — she is rehearsing being wanted.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">If I wore this out... would you be proud or embarrassed?</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Proud. Bold and careful both look good on you.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jdressreh-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Quiet Morning</p>
<p class="mission-narrative-focus">Bedroom hush. Soft oral invitation — she still needs a green light spoken gently.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">I have been thinking about thanking you with my mouth. If that is too much, say so.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">It is not too much. Only if you want it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jquietmorn-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Shoot Me Properly</p>
<p class="mission-narrative-focus">Living room light. Old insecurity paid off — she wants direction, not silence behind a lens.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Direct me. Chin, hands, eyes. Make me feel chosen, not posed like furniture.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I will call the shot. You own the frame.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jshootme-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Closet Confidence</p>
<p class="mission-narrative-focus">Bedroom closet. Rank looks soft-to-bold so the undress ladder has a story, not a dump of outfits.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Order them for me. Soft first. Bold last. I trust your eyes more than mine today.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Soft to bold. I will rank them with you.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jclosetrank-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: More Than Thanks</p>
<p class="mission-narrative-focus">Emotional favor ledger — bike, garden, nights he stayed. No cash. Body is her language if she chooses it.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Thank you is not big enough. Let me name what you fixed. Then... if you want... let me pay in a way that makes me feel useful.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Name the real debts. I will not turn it into a joke.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jledger-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: If He Calls</p>
<p class="mission-narrative-focus">Optional ring rehearsal. Soft-truth lines if the phone lights up — not a confession, not cruelty.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/jenna/face/jenna_face.jpg" alt="Jenna Face"></div>
<div class="dialog-text jenna">Help me practice. I do not want to bleed for him on the line. Or for you.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Soft truth. Breathe. You do not owe a performance.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="jcallprep-content"></div>
</div>
</div><<approachCharacter "openWorldGirls.jenna">><<silently>>
<<set _approach to [
"She's already on the mat in the garden when you arrive. She doesn't pause her flow. \"Hi,\" she says quietly. \"I was hoping...\"",
"You find her in downward dog through the kitchen window. She sees you watching and waves you in without leaving the pose.",
"\"You came!\" she says, breathless from her warm-up. \"I left the door open. Just... in case. Sit. Watch. Or join.\""
].random()>>
<<set _during to [
"She flows through her sequence slower than usual, holding each pose a beat longer than necessary. Her cheeks are pink. She doesn't say a word.",
"She stretches into a backbend and looks at you upside-down. Her shirt rides up. \"Don't go,\" she says quietly. \"Please. Just stay.\"",
"She works through her routine like she always does, but her eyes flick to you between poses. Checking. Hopeful. A little embarrassed."
].random()>>
<<set _outcome to [
"She finishes in a seated meditation pose and exhales for a long time. When she opens her eyes, she's smiling. \"Thank you for staying. Really.\"",
"She rolls up her mat and tucks her hair behind her ear. \"I... I don't usually like having an audience. But with you it's different. I think.\"",
"She sits cross-legged and looks at you like she's not sure what to do next. \"Do you want some water? I have lemonade. Stay a little longer?\""
].random()>>
<<set _video to $scenes["JS001"].replay.videos.random()>>
<<applyReplay "JS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/garden.jpg" alt="Jenna's Garden">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Jenna mid-flow" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay for lemonade->GardenJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She greets you at the door with the camera already in her hands. \"You came. Thank god. I needed someone today.\"",
"\"Be honest,\" she says when you walk in. \"Does this look... vulnerable? My husband says I always look closed off in photos.\"",
"She's setting up the tripod in the living room when you arrive. \"Help me move the couch a little? The light is *terrible* over there.\""
].random()>>
<<set _during to [
"She poses for you carefully, asking after every shot if she should change something. She looks at the back of the camera between every frame, biting her lip.",
"She loosens her hair on the third pose. The fourth, she undoes a button. The fifth, she asks if she should undo another. You say yes. She does.",
"She poses the way she's always wanted to but never had anyone to do it for. By the end, the camera is forgotten on the couch."
].random()>>
<<set _outcome to [
"She scrolls through the photos and her eyes get glassy. \"I look... I actually look like *me* in these. Thank you. *Thank you.*\"",
"She closes the camera and hugs herself. \"My husband won't see these. These are just... ours. Is that okay?\"",
"She kisses your cheek and lingers there, eyes closed. \"Don't go yet. Stay for tea? Stay for *anything*.\""
].random()>>
<<set _video to $scenes["JS002"].replay.videos.random()>>
<<applyReplay "JS002">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Jenna posing" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Pack up the camera->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She lets you in with an armful of dresses on hangers. \"You can be honest. I just need a second opinion. Carol said you have an *eye*.\"",
"Her bedroom door is open. She's surrounded by half a dozen outfits on the bed. \"Help me. Please. I have *nothing* to wear.\"",
"\"I'm trying to put together an outfit for a dinner my husband wants me to attend,\" she says, biting her thumb. \"He's not coming. So I want to look... noticed.\""
].random()>>
<<set _during to [
"She tries on the first dress in the bathroom, then walks out hesitantly. She watches your face. Whatever she sees makes her smile and turn back for the next one.",
"By the third outfit she's stopped going to the bathroom to change. She just turns her back. Then she stops turning her back. Then she's just laughing at herself.",
"She tries something low-cut and meets your eye in the mirror. \"Too much?\" Then a heartbeat: \"Or not enough?\""
].random()>>
<<set _outcome to [
"She picks an outfit and folds the rest. \"Thank you. Honestly. I haven't had anyone tell me I look pretty in *months*.\"",
"She puts on a robe over the last outfit and sinks onto the bed. \"That was more fun than the dinner will be. I'm thinking of just... not going.\"",
"She looks at herself in the mirror and meets your eye. \"He's going to be so jealous when I tell him you helped pick.\" She doesn't sound regretful."
].random()>>
<<set _video to $scenes["JS003"].replay.videos.random()>>
<<applyReplay "JS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Jenna trying clothes" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Help her hang the dresses->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"Her bathroom door is cracked open, steam pouring through. She's humming the same tune as last time. The latch wasn't fully engaged. *Again.*",
"You hear the bath running. The door isn't quite closed. You stop in the hall and listen.",
"She catches your reflection in the mirror through the gap. She doesn't react. She rises from the water like she's been waiting."
].random()>>
<<set _during to [
"Through the steam she looks softer than she ever does in daylight. The same long bath. The same slow washing. The same little gasps that aren't quite for the water.",
"She faces the door this time. She doesn't pretend to be alone. She washes herself slowly, watching herself in the bathroom mirror. Watching the door.",
"She rises out of the tub completely once and stands there a moment, dripping. Then she sinks back in. The whole thing took about ten seconds. The image won't leave you for days."
].random()>>
<<set _outcome to [
"She steps out of the tub eventually, towel around herself, and pads to the bathroom door. She pushes it shut without saying anything.",
"She catches your eye through the mirror as she fixes her hair. \"You're going to get me into so much trouble,\" she says quietly. She's smiling.",
"She turns off the bathwater. \"You can come in. If you want. Just for a minute.\" She doesn't say it twice. The hallway is very quiet."
].random()>>
<<set _video to $scenes["JS004"].replay.videos.random()>>
<<applyReplay "JS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bathroom.jpg" alt="Jenna's Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip away from the door->BathroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She opens the bedroom door in a robe. She wasn't expecting you. Or she was. Her hand is already at the tie. \"Oh. Hi. Sorry — I just got out of the bath.\"",
"\"Come in,\" she says quickly, holding the robe closed at her chest. \"Just give me a second to — \" She doesn't actually move to change.",
"She lets you in and immediately turns away, pretending to look for something. The robe is loose at the back. She's not in a hurry to fix it."
].random()>>
<<set _during to [
"She fusses with her hair, her tea, her phone. The robe slips at the shoulder. She doesn't fix it for a full minute.",
"She turns toward you mid-sentence and the robe parts. \"Oh — sorry — \" Her hands move slow. She's still talking when the fabric falls.",
"She pretends to drop something near the bed. The robe stays where it falls. \"Could you...?\" She doesn't finish the sentence."
].random()>>
<<set _outcome to [
"She finally pulls the robe back together and laughs softly. \"You must think I'm a *mess*. I never used to be like this.\"",
"She lies back on the bed in the open robe and looks at the ceiling. \"It's nice having you here. Even if I... barely talk. Just... stay?\"",
"She kisses your cheek as you leave. \"I shouldn't be like this. I really shouldn't. Come back tomorrow.\""
].random()>>
<<set _video to $scenes["JS005"].replay.videos.random()>>
<<applyReplay "JS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[See yourself out->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"Her gate is unlocked again. The pool. The sunlight. The same low groan when you walk in. She's halfway through what you remember. She doesn't stop.",
"She's at the pool's edge, naked, hand between her legs. She looks up. \"Come closer,\" she breathes. \"Don't talk. Just sit.\"",
"She sees you walking up the path and slips lower into the water, but doesn't stop her hand. \"Don't be polite. Sit. Watch. Please.\""
].random()>>
<<set _during to [
"She watches you watching her. The hand. The water. The gasps she's not even pretending to hide. The whole afternoon feels like a dream.",
"She moves to the lounger when she gets close, water everywhere, and finishes herself with both hands while looking at you. She doesn't break eye contact once.",
"She climbs out and lies face down on the wet tile and finishes with her hand pinned beneath her. The wet sounds. The breath. She doesn't make noise — she's afraid the neighbors will hear."
].random()>>
<<set _outcome to [
"She rolls onto her back and exhales like she hasn't breathed in an hour. \"Come back tomorrow. Please. Just... come back.\"",
"She slides into the water again to cool off. She floats on her back. \"That's — that's all I needed today. Thank you.\"",
"She wraps a towel around herself, walks to you, kisses you on the corner of the mouth. Then she goes inside without a word."
].random()>>
<<set _video to $scenes["JS006"].replay.videos.random()>>
<<applyReplay "JS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/pool.jpg" alt="Jenna's Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Walk back through the gate->PoolJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She's waiting on the couch when you arrive. \"Door,\" she says quietly. You lock it. She pats the cushion next to her.",
"She pulls you into the bedroom and shuts the door before you've said hello. \"Just... let me. Don't talk. Please.\"",
"\"Sit,\" she says when you walk in, gesturing to the armchair. \"Just sit. Let me thank you again. I want to.\""
].random()>>
<<set _during to [
"Her hands are steady this time, not nervous. She knows what she's doing. She knows she wants to. The whole thing is slow and deliberate.",
"She kisses you while she works you. Her free hand on your jaw, holding you to her. \"Stay,\" she whispers. \"Stay just like this.\"",
"Her grip is gentle but determined. She watches your face the whole time. Like she's trying to memorize it. Like this is the only thing she has."
].random()>>
<<set _outcome to [
"She wipes her hand on the towel she had ready and rests her head on your shoulder. \"Don't go. Just sit with me a minute. *Please.*\"",
"She kisses your fingertips one by one. \"You'll come back, won't you? Promise me. Just... promise.\"",
"She sits up, brushes her hair behind her ear, and smiles at her hands in her lap. \"He hasn't called in two weeks. But you came. Thank you.\""
].random()>>
<<set _video to $scenes["JS007"].replay.videos.random()>>
<<applyReplay "JS007">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay a little longer->LivingRoomJenna]]
</div>
</div>
/* JENNA PHASE 2 REPLAYS START */<<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS008"].replay.videos.random()>>
<<applyReplay "JS008">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sit with her a while->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS009"].replay.videos.random()>>
<<applyReplay "JS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna couch">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay on the couch->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS010"].replay.videos.random()>>
<<applyReplay "JS010">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave soft->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS011"].replay.videos.random()>>
<<applyReplay "JS011">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna lingerie">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Praise her again->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS012"].replay.videos.random()>>
<<applyReplay "JS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna wardrobe">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Close the closet->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS013"].replay.videos.random()>>
<<applyReplay "JS013">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bathroom.jpg" alt="Jenna bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip back to the hall->BathroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS014"].replay.videos.random()>>
<<applyReplay "JS014">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna morning">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay in bed->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS015"].replay.videos.random()>>
<<applyReplay "JS015">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna wrong room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Find the right door later->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS016"].replay.videos.random()>>
<<applyReplay "JS016">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna chair">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave the chair warm->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS017"].replay.videos.random()>>
<<applyReplay "JS017">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna mat">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Roll up the mat->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS018"].replay.videos.random()>>
<<applyReplay "JS018">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna shoot">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Pack the lights->LivingRoomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS019"].replay.videos.random()>>
<<applyReplay "JS019">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/bedroom.jpg" alt="Jenna study">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Help with the straps->BedroomJenna]]
</div>
</div><<silently>>
<<set _approach to [
"She is already waiting when you arrive — soft smile, lonely eyes, door left easy.",
"\"You came back,\" she whispers. \"I was hoping. Do I look okay?\"",
"The house is quiet. She pulls you in before the hall light finishes its flicker."
].random()>>
<<set _during to [
"She moves with careful hunger, checking your face for approval between every breath.",
"Praise undoes her faster than touch. She drinks every kind word.",
"Loneliness leaves the room for a while. Only heat and her soft questions remain."
].random()>>
<<set _outcome to [
"She rests against you after. \"Stay a minute. The quiet gets loud when you leave.\"",
"She fixes her hair and laughs once, shaky. \"Tomorrow? Please?\"",
"She kisses your cheek and lingers. \"Thank you for seeing me.\""
].random()>>
<<set _video to $scenes["JS020"].replay.videos.random()>>
<<applyReplay "JS020">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/jenna_house/livingroom.jpg" alt="Jenna ledger">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Close the ledger->LivingRoomJenna]]
</div>
</div>
/* JENNA PHASE 2 REPLAYS END */<div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-bathroom-spy-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-handjob-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-pool-show-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-photoshoot-content"></div>
</div>
<!-- Estrutura da Lightbox (Reutilizada) -->
<div id="image-lightbox-overlay" class="lightbox-overlay" style="display: none;">
<span class="lightbox-close" onclick="window.closeLightbox()">×</span>
<span class="lightbox-nav prev" onclick="window.changeLightboxImage(-1)">❮</span>
<div class="lightbox-content">
<img id="lightbox-image" src="" alt="Enlarged photoshoot picture">
</div>
<span class="lightbox-nav next" onclick="window.changeLightboxImage(1)">❯</span>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-robe-drop-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-trying-clothes-content"></div>
</div>
<!-- Estrutura da Lightbox (Reutilizada) -->
<div id="image-lightbox-overlay" class="lightbox-overlay" style="display: none;">
<span class="lightbox-close" onclick="window.closeLightbox()">×</span>
<span class="lightbox-nav prev" onclick="window.changeLightboxImage(-1)">❮</span>
<div class="lightbox-content">
<img id="lightbox-image" src="" alt="Enlarged photoshoot picture">
</div>
<span class="lightbox-nav next" onclick="window.changeLightboxImage(1)">❯</span>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="jenna-yoga-glimpse-content"></div>
</div>
<!-- Estrutura da Lightbox (Galeria de Imagens) -->
<div id="image-lightbox-overlay" class="lightbox-overlay" style="display: none;">
<span class="lightbox-close" onclick="window.closeLightbox()">×</span>
<span class="lightbox-nav prev" onclick="window.changeLightboxImage(-1)">❮</span>
<div class="lightbox-content">
<img id="lightbox-image" src="" alt="Enlarged yoga pose">
</div>
<span class="lightbox-nav next" onclick="window.changeLightboxImage(1)">❯</span>
</div>
/* JENNA PHASE 2 SCENES START */<div class="game-container spy-scene-container">
<div id="jenna-lapdance-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-couch-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-undress-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-lingerie-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-wardrobe-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-bathroom-tease-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-first-bj-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-wrongroom-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-chair-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-yogacardio-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-photoshoot-sex-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-lingerie-stud-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-emotional-debt-content"></div>
</div><div class="game-container spy-scene-container">
<div id="jenna-husband-call-content"></div>
</div>
/* JENNA PHASE 2 SCENES END */<div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
So this is Kenzie's room. It's... surprisingly normal. Band posters on the wall, a gaming console hooked up to a small TV, clothes strewn over a chair. A typical teenager's den.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's typical teenage bedroom">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BedroomKenzie">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">Kenzie's room is empty right now. Just the hum of a gaming console.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Kenzie's Bedroom->ValerieHouse]]
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 6) + 1>>
<<silently>>
<<set $openWorldGirls.kenzie.dailyInteractions.flirt += 1>>
<<set $openWorldGirls.kenzie.love += $openWorldGirls.kenzie.interactions.flirt.stats.love>>
<<set $openWorldGirls.kenzie.lust += $openWorldGirls.kenzie.interactions.flirt.stats.lust>>
<<set $openWorldGirls.kenzie.corruption += $openWorldGirls.kenzie.interactions.flirt.stats.corruption>>
<<set $openWorldGirls.kenzie.rebellion += $openWorldGirls.kenzie.interactions.flirt.stats.rebellion>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
kenzie: "Are you always staring at people, or am I just special?",
player: "Let's just say you're hard to ignore."
},
{
kenzie: "My mom would probably have a fit if she knew the way you were looking at me.",
player: "Good thing she's off aligning her chakras then, huh?"
},
{
kenzie: "You're not as boring as I thought you'd be. Don't let it go to your head.",
player: "I'll try my best not to."
},
{
kenzie: "So... what's your deal, anyway? You just hang out with old people like my mom and your aunt?",
player: "Sometimes I branch out. Depends on who's around."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.kenzie.face" alt="Kenzie's Face">
</div>
<div class="dialog-text kenzie">
<<= _randomDialogue.kenzie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/kenzie/flirt/kenzie_flirt_" + _randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She smirks, a flicker of genuine interest in her eyes before she quickly hides it behind her usual sarcastic mask.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 5) + 1>>
<<silently>>
<<set $openWorldGirls.kenzie.dailyInteractions.smoke += 1>>
<<set $openWorldGirls.kenzie.love += $openWorldGirls.kenzie.interactions.smoke.stats.love>>
<<set $openWorldGirls.kenzie.lust += $openWorldGirls.kenzie.interactions.smoke.stats.lust>>
<<set $openWorldGirls.kenzie.corruption += $openWorldGirls.kenzie.interactions.smoke.stats.corruption>>
<<set $openWorldGirls.kenzie.rebellion += $openWorldGirls.kenzie.interactions.smoke.stats.rebellion>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
kenzie: "God, I needed this. My mom would kill me if she knew I smoked. You're not gonna tell her, are you?",
player: "Your secret's safe with me."
},
{
kenzie: "Want a drag? It's just a cigarette... mostly. Don't be a square.",
player: "Sure, why not. Don't mind if I do."
},
{
kenzie: "This is my one moment of peace. Just me and my bad habits. Don't make it weird.",
player: "I won't. I get it."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.kenzie.face" alt="Kenzie's Face">
</div>
<div class="dialog-text kenzie">
<<= _randomDialogue.kenzie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _imagePath to "img/chars/kenzie/smoke/kenzie_smoke_" + _randomNumber + ".webp">>
<img @src="_imagePath" alt="Kenzie smoking" style="max-width: 580px; border-radius: 8px;">
</div>
<p class="spy-narrative">
Kenzie takes a long drag from her cigarette, exhaling a cloud of smoke with a look of defiant relaxation. Sharing this forbidden moment seems to lower her guard, just a little.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 3) + 1>>
<<silently>>
<<set $openWorldGirls.kenzie.dailyInteractions.talk += 1>>
<<set $openWorldGirls.kenzie.love += $openWorldGirls.kenzie.interactions.talk.stats.love>>
<<set $openWorldGirls.kenzie.lust += $openWorldGirls.kenzie.interactions.talk.stats.lust>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
kenzie: "Ugh, what now? Can't you see I'm busy?",
player: "Busy doing what, exactly? Staring at your phone?"
},
{
kenzie: "If you're looking for my mom, she's probably meditating at a plant or something. Don't ask me, I'm not her keeper.",
player: "Actually, I was looking for you."
},
{
kenzie: "This house is so boring. I'm literally dying of boredom.",
player: "There are worse places to be bored, I guess."
},
{
kenzie: "Did you need something, or are you just enjoying the awkward silence?",
player: "The silence wasn't awkward until you mentioned it."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.kenzie.face" alt="Kenzie's Face">
</div>
<div class="dialog-text kenzie">
<<= _randomDialogue.kenzie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/kenzie/talk/kenzie_talk_" + _randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Kenzie barely looks up from her phone, her expression a perfect mask of teenage apathy.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Keep Kenzie's Secret
</p>
<div class="environment-container">
<div class="environment-image">
<img id="kenzie-bar-img" src="img/chars/kenzie/bar/kenzie_bar_1.jpg" alt="Kenzie at the pool table" />
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
The Rusty Mug hums with low music and clacking billiard balls. Kenzie’s here, dressed to start trouble and pretending to belong.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face" />
</div>
<div class="dialog-text kenzie">
She leans in, voice barely above the bass. "If anyone asks, I’m your plus-one. Don’t rat me out."
</div>
</div>
<div class="game-challenge kbar-challenge">
<div id="kbar-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: A Favor for Kenzie
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/tease/kenzie_refrigerator.jpg" alt="Kenzie, in panties, raiding the fridge" />
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
The kitchen is quiet. No incense. No Valerie. Just Kenzie, in her underwear, glaring into a fridge full of greens and guilt.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face" />
</div>
<div class="dialog-text kenzie">
"Seriously, look at this. Tofu. Sprouts. Kale juice. I’m going to wither."
She turns to you, lowering her voice. "You seem cool. And I’m desperate for real food. Will you do me a huge favor? Order me a pizza. With everything. Pepperoni, extra cheese... the opposite of this fridge."
She glances around. "But we have to be fast and discreet. My mom can’t even suspect it."
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face" />
</div>
<div class="dialog-text player">
"Show me the app. Let’s do it right."
</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kpizza-content"></div>
</div>
</div>
/* KENZIE PHASE 2 MISSIONS */<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Spotter's Privilege</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/gym/kenzie_gym_elliptical.jpg" alt="Kenzie at the gym">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Gym floor, mid-set. She pretends she does not care you showed up — until she needs a real form check and a spotter who will not turn it into a comedy bit.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Don't make it weird. Tell me if my depth looks right. And stop staring at my glutes like you invented them.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Depth, brace, finish. I'll keep it useful.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kspotter-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Booth for Two</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/date/kenzie_restaurant_black.webp" alt="Booth date">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Coffee-shop booth, late afternoon. She slides in like this is not a date — then starts spending like your card is public infrastructure.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">You dragged me out. You pick the food energy. If I order too much... that's a tomorrow problem.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll run the check. You run the vibe.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kbooth-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Second Sitting</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/date/kenzie_restaurant_noodles.webp" alt="Second sitting">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Round two. Comfort carbs, then a flex course, then a card machine that hates her. Match her vibe beat for beat.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Okay fine. This is becoming a thing. Don't say date. Just don't make me look broke in public.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Comfort first. Flex second. Cover if it tanks.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="ksecond-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Fair Lights</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/date/kenzie_carnival_bubble.webp" alt="Fair lights">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Mall-adjacent carnival strip. Tickets, bubbles, bad decisions — and a photo booth that will absolutely decline her card.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Spend the tickets smart. Keep me from looking like a lost kid. And if the machine hates me again... you know the drill.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Wallet of tickets. I've got the route.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kfair-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: After Hours</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/gym/kenzie_gym_squat.jpg" alt="After hours gym">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Gym emptying out. She is not stretching for recovery — she is waiting for the floor to clear and for you to not blow the heat meter.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Staff's packing up. Closet-side hallway. If you're still here, don't be a coward — and don't be loud.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Quiet path. Blind spot. I'm with you.</div>
</div>
<div class="game-challenge kbar-challenge">
<div id="kafterhours-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Bailout</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/date/kenzie_cheese_bite.webp" alt="Bailout crisis">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Her room. Cheese-bite selfie energy with panic underneath. The debt just stopped being a joke and started being a phone full of ugly notifications.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Don't tell Mom. Don't lecture. Help me sort the notice, the declines, the proof. I need someone who won't spiral with me.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Unlock the phone. We triage, then we plan.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kbailout-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Fake Professional</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/job/kenzie_nanny_binder.jpg" alt="Nanny binder">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Living room. A nanny binder, borrowed professionalism, and five minutes to sound like someone who should be trusted with children and rent money.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Quiz me. Real questions. If I bomb this interview I stay broke — and I will blame your softballs.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Kids, emergencies, closing smile. No mercy.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kpro-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Interest Due</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/dress/kenzie_grey_dress.jpg" alt="Grey dress negotiations">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Bedroom door half-closed. Grey dress on purpose. She wants to negotiate interest like a game she can still win — numbers first, attitude second.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Look presentable, talk numbers, don't be a creep about the dress. Help me buy time and maybe I owe you differently.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Ledger open. Dress noted. We buy time without making it worse.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kinterest-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Visual Tip</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/dress/kenzie_white_mesh.jpg" alt="White mesh tip">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Living room daylight. White mesh. She frames it as a tip for the collector fantasy — and dares you to be honest without being gross.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">If I wear this for the stupid debt game, you do not get fake polite. Eyes up. Words honest. Jokes optional and dangerous.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'm not looking away. And I'm not turning it into a roast.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kvisual-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Fridge Raid</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/kitchen_stills/kenzie_kitchen_shorts.jpg" alt="Fridge raid">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Kitchen after dark. Shorts, fridge light, and a girl who wants real food without waking the whole spiritual house. Quiet hands. Good loot.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Mom's out. Help me raid this sad fridge, then stay. I have a better idea than kale.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Quiet door. Real stash. Then I'm not leaving.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kfridge-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Leave the Door</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/bed/kenzie_bed_teal.jpg" alt="Bedroom invite">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Her bedroom. Teal sheets, cracked door, text rules written like a raid invite. One soft knock. No speeches. Home rules after the gym.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Door stays cracked. You knock once. If I don't say get out... come in. Don't make me write a poem about it.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">One knock. Then I wait for the silence.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kleave-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Collections Call</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/dress/kenzie_grey_dress.jpg" alt="Collections">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Bedroom. The notice is prop enough for the fantasy. She wants the collector voice held — and the safeword treated like law.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Knock like a collector. Use the line. If I freeze, don't soft out — but if I say stop, you stop. Deal?</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Deal. Roleplay with a kill switch.</div>
</div>
<div class="game-challenge kbar-challenge">
<div id="kcollect-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Pool Tab</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/pool.jpg" alt="Pool tab">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Weekend pool. Outdoor version of the debt game — fence, windows, towels, safeword restated. Louder risk. Wetter payoff.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Mom's not home. Fence is high enough. If we're stupid, we do it by the water. Checklist first — attitude second.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Ops check. Then we settle the tab.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kpooltab-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Cover for Me</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Living room alibi">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Living room. If Valerie asks why the house smells like oil and trouble, you need one consistent story — not four freestyles.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie Face"></div>
<div class="dialog-text kenzie">Build the cover. Movie night. Spilled lotion. Matching times. Then stay on the couch. I want to push further while the story still works.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Alibi first. Then the couch.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="kcover-content"></div>
</div>
</div><<approachCharacter "openWorldGirls.kenzie">><<silently>>
<<set _approach to [
"Her door is ajar again. You hear the breathing first. The same breathy little hitch you remember. You don't knock.",
"You catch her sprawled on the bed, headphones on, hand down her sweatpants. She sees you in the door and freezes. Then she shrugs and keeps going.",
"\"Bro. Door open means *enter at your own risk*.\" She doesn't stop. She doesn't move her hand. She just stares back."
].random()>>
<<set _during to [
"Her eyes lock onto yours and she finishes what she started, just slower. Like a dare. Like she's daring you to look away first. You don't.",
"She kicks the sheet aside completely and goes faster. The headphones come off. \"This is my room, dude. I do what I want.\"",
"She gets up onto her elbow halfway through and grins at you. \"You gonna stand there the whole time, weirdo? At least *sit*.\""
].random()>>
<<set _outcome to [
"She finishes with a sharp little gasp and rolls onto her back, breathing hard. \"There. Show's over. You can leave a tip in the jar.\"",
"She wipes her hand on the sheet without ceremony. \"Don't tell my mom you saw that. She'd ascend or something.\"",
"She sits up and grins at you. \"Pay-per-view, dude. Next time you owe me.\" Then she grabs her phone like nothing happened."
].random()>>
<<set _video to $scenes["KS001"].replay.videos.random()>>
<<applyReplay "KS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back out of the room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"She opens the door, sees it's you, rolls her eyes, and sighs. \"Fine. *Fine.* Come in. Lock it.\" You lock it.",
"She gestures to the bed without looking up from her phone. \"Drop your pants, dude. I'm in the middle of a stream. Make it quick.\"",
"\"Bro. You owe me ten bucks for this.\" She holds out her hand. You give her ten bucks. She slides off the bed and kneels."
].random()>>
<<set _during to [
"She works you while watching TikToks on her propped phone. It should be insulting. It is. It still works.",
"She switches hands halfway through, lazy and bored. \"Hurry up. I have a thing.\" There's no thing.",
"Her grip is exactly hard enough to be a little mean. She likes that you can tell. She winks once and keeps going."
].random()>>
<<set _outcome to [
"She wipes her hand on a tissue, balls it up, throws it at the trash, misses. \"Out. I have a raid in three minutes.\"",
"She gets up, hits you in the chest playfully, and shrugs. \"Same time next week, weirdo. Bring snacks.\"",
"She climbs back onto her bed and turns the volume up on her stream. \"Door, dude. Don't slam it.\""
].random()>>
<<set _video to $scenes["KS002"].replay.videos.random()>>
<<applyReplay "KS002">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Pull on your jeans->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"She catches you in the hall after midnight. \"Truth or dare, weirdo.\" You pick truth. She rolls her eyes. \"Dare. Get in here.\"",
"Her bedroom is dim. Her smile in the dark is nothing but trouble. \"My turn. Sit on the edge of the bed. Don't move.\"",
"\"I dare you to keep quiet,\" she whispers, locking her bedroom door. \"My mom's just down the hall. If you *make a sound*, I stop.\""
].random()>>
<<set _during to [
"She works you with one eye on the door and one on your face. Every creak in the hallway makes her go *faster*, not slower. She's twisted like that.",
"She pulls back to grin at you and whispers \"Quiet, dude. Quiet.\" Then she goes right back to it. The grin doesn't leave her face.",
"She's *good* at this in a way you didn't expect. The dare framing is the cover story. The skill is the truth."
].random()>>
<<set _outcome to [
"She wipes her mouth on the back of her hand and gives you a finger gun. \"Pew. Dare won. You owe me a *bigger* one next time.\"",
"She crawls up next to you and lies on her side, watching your face. \"You okay, weirdo? You look kinda destroyed.\"",
"She gets up, tightens her ponytail, and shrugs. \"Out. Before my mom does her bedtime affirmations and notices you didn't leave.\""
].random()>>
<<set _video to $scenes["KS003"].replay.videos.random()>>
<<applyReplay "KS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip out the side door->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"\"You came back for *that?*\" she asks when you walk in. She's already pulling her hoodie off. \"Lock the door, then. And don't be a baby about it.\"",
"She finds you in the hallway and grabs your wrist. \"Bedroom. *Now.* I've been thinking about your face all day. It's pissing me off.\"",
"Her bedroom door swings open before you can knock. \"Get in. Sit down. Shut up.\" You do all three. She closes the door behind you."
].random()>>
<<set _during to [
"She doesn't pretend it's easy this time. She looks up at you with watery eyes between strokes and grins like she's *winning* something. Maybe she is.",
"She paces herself this round, controlling the depth and the speed. \"Don't move,\" she warns. \"I'm running this.\" You don't move.",
"Her hands grip your thighs hard. Her hair sticks to her forehead. The whole bed shakes. The whole house is asleep. She's not stopping."
].random()>>
<<set _outcome to [
"She wipes her face with her sleeve and laughs hoarsely. \"Okay. *Okay.* Now we're even for the bar thing.\"",
"She climbs up next to you, completely flushed. \"Don't tell anyone I'm good at that, dude. Ruins my brand.\"",
"She gets up, finds her hoodie, pulls it back on. \"Same time next week. Don't bring flowers, bro. I'm not your *girlfriend*.\""
].random()>>
<<set _video to $scenes["KS004"].replay.videos.random()>>
<<applyReplay "KS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Slip out before her mom notices->BedroomKenzie]]
</div>
</div>
/* KENZIE PHASE 2 REPLAYS */<<silently>>
<<set _approach to [
"Fridge light again. She is already half on the counter, grinning like trouble.",
"Kitchen empty. Kenzie pats the counter. \"Same show. Faster encore.\"",
"You catch her with the sprayer in hand before a drop falls. She raises an eyebrow."
].random()>>
<<set _during to [
"She puts on the babygirl bit, then ruins it with a filthy laugh under the spray.",
"Water and bare skin. She aims the mess at the tile and at your attention.",
"Counter edge, open fridge, zero dignity — all intentional."
].random()>>
<<set _outcome to [
"She tosses you a towel. \"Spill story still holds.\"",
"\"Okay. Out before Mom invents a reason to sage the kitchen.\"",
"She steals a leftover slice from her stash. \"Payment for the audience.\""
].random()>>
<<set _video to $scenes["KS006"].replay.videos.random()>>
<<applyReplay "KS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/kitchen_stills/kenzie_kitchen_shorts.jpg" alt="Kitchen">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the kitchen->KitchenValerie]]
</div>
</div><<silently>>
<<set _approach to [
"Living room dark again. Oil bottle already on the cushion.",
"She pats the couch. \"Alibi still works. Sit.\"",
"The TV plays something neither of you watches."
].random()>>
<<set _during to [
"Oil, fingers, her eyes on you the whole time.",
"She edges herself messy and proud, then shushes her own moan.",
"Lotion story, upgraded. Your job is witness."
].random()>>
<<set _outcome to [
"She wipes her hand on a throw she already planned to wash.",
"\"Cover story holds. Don't improvise with Mom.\"",
"She kicks your shin lightly. \"Same time tomorrow is greedy. Tomorrow-ish.\""
].random()>>
<<set _video to $scenes["KS008"].replay.videos.random()>>
<<applyReplay "KS008">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Living room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the living room->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"Gym almost empty. She nods toward the same hall.",
"After hours again. She does not bother with small talk.",
"She wipes the squat rack and mutters, \"Same corner. Faster.\""
].random()>>
<<set _during to [
"Utility hall, clothes half off, risk sharp as the first time.",
"She takes you against the wall like she owns the blind spot.",
"Quiet curses. Iron smell. Her legs shaking after."
].random()>>
<<set _outcome to [
"She fixes her ponytail. \"Protein shake. Then never happened.\"",
"\"Next time home. This place is going to get us banned.\"",
"She bumps your shoulder. \"Form looked fine. Other form too.\""
].random()>>
<<set _video to $scenes["KS009"].replay.videos.random()>>
<<applyReplay "KS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/gym/kenzie_gym_ass_closeup.jpg" alt="Gym">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the gym->Gym]]
</div>
</div><<silently>>
<<set _approach to [
"Door cracked. Teal sheets. She does not bother with a text.",
"She is already face-down on the bed when you knock once.",
"\"Home rules,\" she says. \"In me. Again.\""
].random()>>
<<set _during to [
"Creampie hunger without the first-time nerves — just need.",
"She rides until her voice goes thin, then pulls you deeper.",
"Sheets ruined. She looks proud of the damage."
].random()>>
<<set _outcome to [
"She peeks, snorts, and steals the blanket.",
"\"Chair is off limits until I say. Bed is not.\"",
"She tosses you a water bottle. \"Hydrate, freak.\""
].random()>>
<<set _video to $scenes["KS010"].replay.videos.random()>>
<<applyReplay "KS010">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/bed/kenzie_bed_teal.jpg" alt="Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to her room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"Grey dress. Prop notice. She is already in character.",
"\"Collections,\" she says, deadpan. \"Stop still means stop.\"",
"She holds the mesh underlayer like evidence."
].random()>>
<<set _during to [
"Roleplay with teeth. Mouth, then bed, then mess on her face.",
"She demands the balance line between moans.",
"Facial finish — she checks the damage like a receipt."
].random()>>
<<set _outcome to [
"\"Partial payment. Door closed.\"",
"She wipes her cheek. \"Ugly. Effective.\"",
"\"Debt math is a lie. That felt real though.\""
].random()>>
<<set _video to $scenes["KS011"].replay.videos.random()>>
<<applyReplay "KS011">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/dress/kenzie_grey_dress.jpg" alt="Collections">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to her room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"Weekend sun. She checks the fence, then waves you over.",
"Pool deck. Same debt joke, wetter stage.",
"\"Outdoor tab,\" she mouths. \"Windows look clear.\""
].random()>>
<<set _during to [
"Water, tile, risk. She takes you at the edge and shushes you both.",
"Creampie under open sky — reckless on purpose.",
"Chlorine and sex on the same air."
].random()>>
<<set _outcome to [
"Towel toss. Swim story ready if Mom appears.",
"\"If the neighbors saw anything, we move states.\"",
"She floats once, smug, then grabs her top."
].random()>>
<<set _video to $scenes["KS012"].replay.videos.random()>>
<<applyReplay "KS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/pool.jpg" alt="Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the pool->PoolValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She points at the floor. \"Show-off night. Knees optional for you.\"",
"Three outfits, one goal. She is already smug.",
"\"Watch me be disgusting and excellent.\""
].random()>>
<<set _during to [
"Depth as competition. Tears, spit, scoreboard eyes.",
"Outfit changes mid-session like stages of a boss fight.",
"She holds at the base just to prove the win."
].random()>>
<<set _outcome to [
"Soda can ice pack. \"Ice cream tax.\"",
"\"Scoreboard says I win.\"",
"She croaks a laugh. \"Worth it. Mostly.\""
].random()>>
<<set _video to $scenes["KS013"].replay.videos.random()>>
<<applyReplay "KS013">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/face/kenzie_face.jpg" alt="Kenzie">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to her room->BedroomKenzie]]
</div>
</div><<silently>>
<<set _approach to [
"She locks the door for real this time. \"Last dare. Slow.\"",
"\"I lead. Stop means stop. More means more.\"",
"Quiet room. No jokes until after."
].random()>>
<<set _during to [
"Careful first push, then hunger when she says so.",
"She looks back bossy even while shaking.",
"Finish on her word. Aftercare awkward and real."
].random()>>
<<set _outcome to [
"Water. Silence. Then a weak joke.",
"\"Don't make it weird. Don't leave yet.\"",
"She face-plants the pillow. \"Okay. That was a lot.\""
].random()>>
<<set _video to $scenes["KS016"].replay.videos.random()>>
<<applyReplay "KS016">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/kenzie/bed/kenzie_bed_face_down.jpg" alt="Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to her room->BedroomKenzie]]
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="caught-masturbating-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="daring-blowjob-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="deepthroat-facefuck-scene-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="gratitude-hj-scene-content"></div>
</div>
/* KENZIE PHASE 2 SCENES */<div class="game-container spy-scene-container">
<div id="kenzie-kitchen-tease-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-oiled-couch-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-first-gymsex-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-home-gush-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-landlord-collect-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-pool-debt-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-dt-showoff-content"></div>
</div><div class="game-container spy-scene-container">
<div id="kenzie-anal-finale-content"></div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">Maple Court Apartments</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/apartments_standard.jpg" alt="Maple Court Apartments">
</div>
</div>
<p class="hub-description">
A tidy mid-rise with a buzzer panel and a wall of numbered mailboxes. Most units are strangers to you — but a name or two you might recognize.
</p>
<div class="hub-navigation-grid">
<<for _num, _unit range $apartments.standard.units>>
<<capture _num, _unit>>
<<if _unit.resident and (
(_unit.unlockKeyEvent and $keyEvents[_unit.unlockKeyEvent]) or
(_num is "3B" and ($keyEvents.skylarAddressKnown or $keyEvents.skylarHomeWelcome or ($missions.SM005 and $missions.SM005.status is 1)))
)>>
<div class="location-item">
<div class="location-overlay">
<<link `"Unit " + _num` `_unit.passage`>><</link>>
</div>
<img src="img/layout/city/apartments_standard.jpg" @alt="'Unit ' + _num">
</div>
<<else>>
<div class="location-item unit-locked">
<div class="location-overlay" style="background-color: rgba(0,0,0,0.75); display:flex; align-items:center; justify-content:center; opacity:1;">
<span class="unit-tag">Unit <<= _num>><br><em style="font-size:0.8em;color:#aaa;"><<= _unit.resident ? "Locked" : "Vacant">></em></span>
</div>
<img src="img/layout/city/apartments_standard.jpg" alt="Locked unit">
</div>
<</if>>
<</capture>>
<</for>>
<div class="location-item">
<div class="location-overlay">[[Leave|CityCenter]]</div>
<img src="img/layout/city/city_center_preview.jpg" alt="Leave">
</div>
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">The Highrise</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/apartments_luxury.jpg" alt="The Highrise">
</div>
</div>
<p class="hub-description">
Glass, chrome, and a doorman who looks straight through you. The good units are up top — and you'd need a reason to be let up.
</p>
<div class="hub-navigation-grid">
<<for _num, _unit range $apartments.luxury.units>>
<<capture _num, _unit>>
<<if _unit.resident and _unit.unlockKeyEvent and $keyEvents[_unit.unlockKeyEvent]>>
<div class="location-item">
<div class="location-overlay">
<<link `"Unit " + _num` `_unit.passage`>><</link>>
</div>
<img src="img/layout/city/apartments_luxury.jpg" @alt="'Unit ' + _num">
</div>
<<else>>
<div class="location-item unit-locked">
<div class="location-overlay" style="background-color: rgba(0,0,0,0.75); display:flex; align-items:center; justify-content:center; opacity:1;">
<span class="unit-tag">Unit <<= _num>><br><em style="font-size:0.8em;color:#aaa;"><<= _unit.resident ? "Locked" : "Vacant">></em></span>
</div>
<img src="img/layout/city/apartments_luxury.jpg" alt="Locked unit">
</div>
<</if>>
<</capture>>
<</for>>
<div class="location-item">
<div class="location-overlay">[[Leave|CityCenter]]</div>
<img src="img/layout/city/city_center_preview.jpg" alt="Leave">
</div>
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">Unit 3B — Skylar</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/hub.jpg" alt="Skylar's apartment">
</div>
<p class="spy-narrative">Skylar's place is small but warm — fairy lights, a worn couch, a stack of paperbacks. It smells like her.</p>
</div>
<<populateLocation "ApartmentSkylar">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">She's not home — probably still at the store. Come back this evening.</p>
<</if>>
<<if not $keyEvents.skylarHomeWelcome and (not $missions.SM005 or $missions.SM005.status is 0)>>
<p class="mission-narrative-focus">She has not given you full house access yet. Keys and boundaries first — if she is here this evening, talk to her about settling in.</p>
<<if $missions.SM005 and $missions.SM005.status is 0>>
<div class="menu-buttons">
<<link "Keys & Boundaries — settle the house rules">><<goto "SkylarKeysBoundaries">><</link>>
</div>
<</if>>
<<else>>
<<run $keyEvents.skylarHomeWelcome = true; $keyEvents.skylarAddressKnown = true;>>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">[[Living room|LivingRoomSkylar]]</div>
<img src="img/layout/skylar_apt/livingroom.jpg" alt="Living room">
</div>
<div class="location-item">
<div class="location-overlay">[[Bedroom|BedroomSkylar]]</div>
<img src="img/layout/skylar_apt/bedroom.jpg" alt="Bedroom">
</div>
<div class="location-item">
<div class="location-overlay">[[Bathroom|BathroomSkylar]]</div>
<img src="img/layout/skylar_apt/bathroom.jpg" alt="Bathroom">
</div>
<div class="location-item">
<div class="location-overlay">[[Balcony|BalconySkylar]]</div>
<img src="img/chars/skylar/balcony/skylar_balcony_front.webp" alt="Balcony">
</div>
<<if $keyEvents.skylarAmenities or ($missions.SM009 and $missions.SM009.status is 0)>>
<div class="location-item">
<div class="location-overlay">[[Complex pool|PoolComplexSkylar]]</div>
<img src="img/layout/skylar_apt/pool.jpg" alt="Pool">
</div>
<</if>>
</div>
<</if>>
<div class="menu-buttons" style="margin-top:16px;">
[[Leave|ApartmentsStandard]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/roxy_penthouse/living.jpg" alt="Roxy's penthouse">
</div>
<p class="spy-narrative">The penthouse is nicer than a dancer's salary should allow — someone else is paying for it. Roxy lounges somewhere in the low light when she's home.</p>
</div>
<<populateLocation "ApartmentRoxy">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Empty. She works nights at the Velvet Curtain — mornings are when she's home.</p>
<</if>>
<div class="menu-buttons">
[[Leave|ApartmentsLuxury]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The Gilded Lily is the local dive bar, a gritty spot for the everyday crowd. Dim lights, sticky floors, and the hum of conversation fill the air.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/bar_dive.jpg" alt="A gritty dive bar interior">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BarGildedLily">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The bar is quiet right now. Just the clink of glasses.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<<if $gildedLilyFeedback>>
<div class="mission-task-container" style="margin-top: var(--sp-3);">
<p class="spy-narrative"><<= $gildedLilyFeedback>></p>
</div>
<<set $gildedLilyFeedback to null>>
<</if>>
<div class="interaction-list">
<h3>Bar Activities</h3>
<div class="interaction-options">
<<link "Order Draft Beer ($6)">>
<<if $player.money < 6>>
<<set $gildedLilyFeedback to "You don't have enough cash for a draft beer (need $6).">>
<<else>>
<<run window.AWAC.spend(6)>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.lust to Math.max(0, $player.lust - 15)>>
<<run window.AWAC.applyReward({ charisma_xp: 6 })>>
<<set $gildedLilyFeedback to "You take a stool and nurse a cold draft beer. The tavern hum takes the edge off your mind. (-$6, -15% Lust, +6 Charisma XP, +1 Hour Passed)">>
<</if>>
<<goto "BarGildedLily">>
<</link>>
<<link "Play a Game of Pool ($5)">>
<<if $player.money < 5>>
<<set $gildedLilyFeedback to "You need at least $5 to challenge the locals at the pool table.">>
<<elseif $player.energy < 8>>
<<set $gildedLilyFeedback to "You're too exhausted to focus on shooting pool right now.">>
<<else>>
<<run window.AWAC.spend(5)>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.athleticism += 1>>
<<run window.AWAC.applyReward({ strength_xp: 4, charisma_xp: 4 })>>
<<set $gildedLilyFeedback to "You chalk your cue and shoot a few rounds of eight-ball with the regulars, picking up technique and banter. (-$5, -8% Energy, +1 Athleticism, +4 Str XP, +4 Cha XP, +1 Hour Passed)">>
<</if>>
<<goto "BarGildedLily">>
<</link>>
</div>
</div>
<div class="hub-navigation-grid" style="margin-top: 20px;">
<div class="location-item">
<div class="location-overlay">
[[Bathroom|BathroomGildedLily]]
</div>
<img src="img/layout/city/bar_dive/bar_dive_bathroom.jpg" alt="Bathroom in the dive bar">
</div>
</div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Bar->CityCenter]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The Rusty Mug is an upscale, chic bar with elegant decor, soft lighting, and a sophisticated crowd sipping fine drinks.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/bar_chic.jpg" alt="A chic and upscale bar interior">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BarRustyMug">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The bar is quiet right now. Just the murmur of refined conversations.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<<if $rustyMugFeedback>>
<div class="mission-task-container" style="margin-top: var(--sp-3);">
<p class="spy-narrative"><<= $rustyMugFeedback>></p>
</div>
<<set $rustyMugFeedback to null>>
<</if>>
<div class="interaction-list">
<h3>Lounge Activities</h3>
<div class="interaction-options">
<<link "Order Signature Cocktail ($14)">>
<<if $player.money < 14>>
<<set $rustyMugFeedback to "An artisan cocktail at The Rusty Mug costs $14. Your wallet comes up short.">>
<<else>>
<<run window.AWAC.spend(14)>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.lust to Math.max(0, $player.lust - 25)>>
<<run window.AWAC.applyReward({ charisma_xp: 12 })>>
<<set $rustyMugFeedback to "You savor an expertly stirred old fashioned under the ambient chandelier light. Sophisticated conversation and smooth jazz settle your thoughts. (-$14, -25% Lust, +12 Charisma XP, +1 Hour Passed)">>
<</if>>
<<goto "BarRustyMug">>
<</link>>
<<link "Mingle in the VIP Lounge (1h)">>
<<if $player.energy < 10>>
<<set $rustyMugFeedback to "You're too low on energy (need at least 10%) to hold court in the VIP lounge.">>
<<else>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<run window.AWAC.advanceTime(1)>>
<<run window.AWAC.applyReward({ charisma_xp: 10, intelligence_xp: 5 })>>
<<set $rustyMugFeedback to "You strike up conversations with the city's affluent regulars, exchanging business wit and learning local social currents. (-10% Energy, +10 Charisma XP, +5 Intelligence XP, +1 Hour Passed)">>
<</if>>
<<goto "BarRustyMug">>
<</link>>
</div>
</div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Bar->CityCenter]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The bathroom in the Gilded Lily is dimly lit and a bit grimy, with stalls and the faint smell of stale beer.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/bar_dive/bar_dive_bathroom.jpg" alt="Dive bar bathroom interior">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BathroomGildedLily">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The bathroom is empty right now.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div class="interaction-list">
<h3>Available Interactions</h3>
<div class="interaction-options">
[[Glory Hole|GloryHoleGildedLily]]
</div>
</div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Return to Bar->BarGildedLily]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">The City Center</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/city_center_preview.jpg" alt="A bustling city center with modern buildings">
</div>
</div>
<p class="hub-description">
You arrive in the heart of the city. The energy here is completely different from the quiet suburbs. People rush by, traffic hums, and the air is thick with ambition, commerce, and the faint promise of anonymity. Anything can happen here.
</p>
<<populateLocation "CityCenter">>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">
[[Gym|Gym]]
</div>
<img src="img/layout/city/gym.jpg" alt="A modern, well-equipped gym">
</div>
<div class="location-item">
<div class="location-overlay">
[[Mall|Mall]]
</div>
<img src="img/layout/city/mall.jpg" alt="The entrance to a large shopping mall">
</div>
<div class="location-item">
<div class="location-overlay">
[[The Gilded Lily|BarGildedLily]]
</div>
<img src="img/layout/city/bar_dive.jpg" alt="A chic and expensive-looking bar">
</div>
<div class="location-item">
<div class="location-overlay">
[[The Rusty Mug|BarRustyMug]]
</div>
<img src="img/layout/city/bar_chic.jpg" alt="A cozy but somewhat gritty dive bar">
</div>
<div class="location-item">
<div class="location-overlay">
[[The Daily Grind|CoffeeShop]]
</div>
<img src="img/layout/city/coffee_shop.jpg" alt="A trendy coffee shop">
</div>
<div class="location-item">
<div class="location-overlay">
[[Public Library|Library]]
</div>
<img src="img/layout/city/library.jpg" alt="The city's public library">
</div>
<div class="location-item">
<div class="location-overlay">
[[Standard Apartments|ApartmentsStandard]]
</div>
<img src="img/layout/city/apartments_standard.jpg" alt="A standard apartment building">
</div>
<div class="location-item">
<div class="location-overlay">
[[Luxury Apartments|ApartmentsLuxury]]
</div>
<img src="img/layout/city/apartments_luxury.jpg" alt="A luxurious, high-end apartment complex">
</div>
<div class="location-item">
<div class="location-overlay">
[[Leave City Center|Outside]]
</div>
<img src="img/layout/house/house.jpg" alt="Leave the city center area">
</div>
</div>
<div id="citycenter-event-container">
<<silently>>
<<set _availableEventsCityCenter to []>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _eventId, _event range $events>>
<<if _event.location is "CityCenter" and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">> <<set _eventReqMet to ($missions[_event.requirements.id] && $missions[_event.requirements.id].status === 1)>>
<<elseif _event.requirements.type is "scene">> <<set _eventReqMet to ($scenes[_event.requirements.id] && $scenes[_event.requirements.id].status === 1)>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsCityCenter.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</silently>>
<<if _availableEventsCityCenter.length > 0>>
<div class="hub-event-list-container">
<h3>! Special Events Happening !</h3>
<<for _i, _eventData range _availableEventsCityCenter>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The Daily Grind is a trendy coffee shop, filled with the aroma of fresh brews and the buzz of caffeine-fueled conversations.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/coffee_shop.jpg" alt="A trendy coffee shop interior">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "CoffeeShop">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The coffee shop is quiet right now. Just the whir of the espresso machine.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div class="interaction-list">
<h3>Available Interactions</h3>
<div class="interaction-options">
<<link "Buy Coffee (5 Money)">>
<<if $player.money >= 5>>
<<set $player.money -= 5>>
<<set $player.energy += 10>>
<<replace "#coffee-result">>
<div class="stat-changes-container">
<p>-5 Money</p>
<p>+10 Energy</p>
</div>
<p>You enjoy a hot cup of coffee, feeling energized!</p>
<</replace>>
<<replace "#story-caption">><<include "StoryCaption">><</replace>>
<<else>>
<<replace "#coffee-result">>
<p>You don't have enough money (need 5) to buy coffee.</p>
<</replace>>
<</if>>
<</link>>
<<if $keyEvents.openWorldCarolCity>>
<<link "Work a Shift (2h, $34)">>
<<if $time < 7 or $time > 14>>
<<replace "#coffee-result">>
<p class="spy-narrative">The Daily Grind is only hiring extra counter help during the morning rush (7:00 AM – 2:00 PM).</p>
<</replace>>
<<elseif $dailyActivities.workCoffeeShop.count >= $dailyActivities.workCoffeeShop.limit>>
<<replace "#coffee-result">>
<p class="spy-narrative">You've already worked a shift at the coffee shop today. The manager told you to come back tomorrow!</p>
<</replace>>
<<elseif $player.energy < 12>>
<<replace "#coffee-result">>
<p class="spy-narrative">You're too low on energy (need at least 12%) to keep up with the fast-paced espresso bar.</p>
<</replace>>
<<else>>
<<set $dailyActivities.workCoffeeShop.count += 1>>
<<set $player.energy to Math.max(0, $player.energy - 6)>>
<<run window.AWAC.earn(34)>>
<<run window.AWAC.advanceTime(2)>>
<<run window.AWAC.applyReward({ charisma_xp: 8 })>>
<<replace "#coffee-result">>
<div class="stat-changes-container">
<p>+$34 ($28 wages + $6 customer tips)</p>
<p>+8 Charisma XP</p>
<p>-6% Energy (caffeine perk offsets fatigue)</p>
<p>+2 Hours Passed</p>
</div>
<p class="spy-narrative">You threw on a barista apron and handled the grinder, steamer, and register through the rush. Chatting up the customers earned you some great tips, and a complimentary double espresso kept your energy steady!</p>
<</replace>>
<<replace "#story-caption">><<include "StoryCaption">><</replace>>
<</if>>
<</link>>
<</if>>
</div>
</div>
<div id="coffee-result"></div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Coffee Shop->CityCenter]]
</div>
</div><div class="game-container">
<<if $player.money >= 50>>
<<set $player.money -= 50>>
<<set _statChanges to ["-50 Money"]>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<<set _gloryPhrases to ["You slide the money through, and warm lips envelop you in ecstasy.", "Anticipation builds as skilled attention brings waves of pleasure.", "The anonymous encounter heightens every sensation, leading to bliss.", "Soft moans echo, matching the rhythmic pull that drives you wild.", "Hidden behind the wall, expert technique leaves you breathless.", "The thrill of the unknown intensifies the intimate service.", "You lose yourself in the moment, surrendering to the expert touch.", "Pleasure surges as the mysterious mouth works its magic.", "Every movement builds tension, culminating in sweet release.", "The barrier adds excitement to the passionate exchange.", "Warmth and suction create an unforgettable high.", "You grip the wall, lost in the anonymous delight.", "Sensations overwhelm as the encounter reaches its peak.", "The hidden partner delivers pure satisfaction.", "Ecstasy flows through the divide, leaving you spent."]>>
<<set _randomPhrase to _gloryPhrases[random(0, _gloryPhrases.length - 1)]>>
<div class="dialog-text player">
You pay 50 for a glory hole blowjob. <<print _randomPhrase>> What an experience!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _randomWebpNum to random(1, 15)>>
<<set _webpPath to "img/layout/city/bar_dive/glory_hole/glory_hole_" + _randomWebpNum + ".webp">>
<<print '<img src="' + _webpPath + '" alt="Random glory hole WEBP">'>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You don't have enough money (need 50) for the glory hole.
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Bathroom->BathroomGildedLily]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The public library is a quiet haven of knowledge, with shelves of books and focused patrons immersed in their studies.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/library.jpg" alt="The city's public library interior">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "Library">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The library is quiet right now. Just the rustle of pages.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div class="interaction-list">
<h3>Available Interactions</h3>
<div class="interaction-options">
<<link "Study (2h)">>
<<if $dailyActivities.studyLibrary.count < $dailyActivities.studyLibrary.limit>>
<<set $dailyActivities.studyLibrary.count += 1>>
<<run window.AWAC.gainStat("intelligence", 2)>>
<<run window.AWAC.advanceTime(2)>>
<<replace "#study-result">>
<div class="stat-changes-container">
<p>+2 Intelligence</p>
<p>+2 Hours Passed</p>
</div>
<p>You hit the books and absorb some knowledge. Time well spent!</p>
<</replace>>
<<else>>
<<replace "#study-result">>
<p>You've already studied enough today. Time to take a break!</p>
<</replace>>
<</if>>
<</link>>
</div>
</div>
<div id="study-result"></div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Library->CityCenter]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title" style="color:#FF6347;">"The Pit"</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/warehouse.jpg" alt="The Pit fight club">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.rina" alt="Rina"></div>
<div class="dialog-text gang">
Whoa, hold up. The first rule of Fight Club is you don't talk about Fight Club. And the second rule is you don't fight while the developers are still building the ring. Scram until the next major update, kid.
</div>
</div>
<p class="spy-narrative">
Yellow caution tape wraps the arena poles, and power tools lie across the concrete benches. The Pit's underground combat circuit and betting engine are actively under construction for an upcoming expansion. Work on your stamina and hit the gym — when the bell finally rings, you'll need every punch you can throw.
</p>
<<populateLocation "ThePit">>
<div class="menu-buttons">
[[Leave The Pit|Outskirts]]
</div>
</div><<goto "ThePit">><div class="game-container">
<<if $player.energy < 12>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You're too exhausted to run right now. You need at least 12% energy for a cardio session!
</div>
</div>
<<elseif $dailyActivities.gymCardio.count < $dailyActivities.gymCardio.limit>>
<<set $dailyActivities.gymCardio.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $player.running += 2>>
<<set $player.cardio += 2>>
<<run window.AWAC.applyReward({ strength_xp: 5 })>>
<<set _statChanges to ["+2 Running", "+2 Cardio", "+5 Strength XP", "-12% Energy", "+1 Hour Passed"]>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<<set _cardioPhrases to ["You hit the treadmill, watching a fit woman running with effortless grace.", "The cardio machines hum as you spot a sexy runner pushing her limits.", "Sweat flies while you notice a hot girl cycling intensely nearby.", "Your heart races, matching the pace of that stunning woman on the elliptical.", "Endurance builds, eyes locked on a curvaceous figure jogging in place.", "The session heats up with glimpses of an alluring athlete in motion.", "You push through the burn, drawn to a voluptuous woman stretching her strides."]>>
<<set _randomPhrase to _cardioPhrases[random(0, _cardioPhrases.length - 1)]>>
<div class="dialog-text player">
You focus on cardio at the gym. <<print _randomPhrase>> Feel the burn!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<if $maxCardioWebps is undefined>> <<set $maxCardioWebps to 15>> <</if>>
<<set _randomWebpNum to random(1, $maxCardioWebps)>>
<<set _webpPath to "img/layout/city/gym/cardio/cardio_" + _randomWebpNum + ".webp">>
<<print '<img src="' + _webpPath + '" alt="Random cardio WEBP">'>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You've done enough cardio today. Time to catch your breath!
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Gym->Gym]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The female locker room is humid and private, with rows of lockers and the sound of water from the showers.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/gym/female_locker_room.jpg" alt="Female locker room interior">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "FemaleLockerRoom">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (MISSIONS E SCENES) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<set _foundHere to false>>
/* Verificar MISSIONS dos RandomEncounters */
<<if _charData.missions and !_foundHere>>
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<set _foundHere to true>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
/* Verificar SCENES dos RandomEncounters */
<<if _charData.scenes and !_foundHere>>
<<for _sceneKey, _sceneData range _charData.scenes>>
<<if _sceneData.location is $locationName and _sceneData.status is 0 and Array.isArray(_sceneData.day) and _sceneData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _sceneData.period is "string" and _sceneData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_sceneData.period) and _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
/* Verificar nas missions principais */
<<set _foundReq to false>>
<<if def $missions>>
<<for _mainMissionKey, _mainMissionData range $missions>>
<<if _mainMissionData.passage is _req.id and _mainMissionData.status is 1>>
<<set _foundReq to true>>
<<break>>
<</if>>
<</for>>
<</if>>
/* Verificar nas missions dos randomEncounters se não encontrou */
<<if !_foundReq and def $randomEncounters>>
<<for _randomCharKey, _randomCharData range $randomEncounters>>
<<if _randomCharData.missions>>
<<for _randomMissionKey, _randomMissionData range _randomCharData.missions>>
<<if _randomMissionData.passage is _req.id and _randomMissionData.status is 1>>
<<set _foundReq to true>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _foundReq>> <<break>> <</if>>
<</for>>
<</if>>
<<if _foundReq>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<set _foundHere to true>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The female locker room is empty right now.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div class="interaction-list">
<h3>Available Interactions</h3>
<div class="interaction-options">
[[Take Shower|ShowerFemaleLockerRoom]]
</div>
</div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Return to Gym->Gym]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The gym is buzzing with activity – weights clanging, treadmills humming, and people pushing their limits. A great spot to build strength and maybe spot some eye candy.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/gym.jpg" alt="A modern gym interior with equipment">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "Gym">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The gym is quiet right now. Just the hum of machines.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div class="interaction-list">
<h3>Available Interactions</h3>
<div class="interaction-options">
[[Workout|WorkoutGym]]
[[Cardio|CardioGym]]
<<if $keyEvents.openWorldCarolCity>>
<<link "Work as Floor Assistant (2h, $35)">>
<<if $time < 12 or $time > 19>>
<<replace "#gym-job-result">>
<p class="spy-narrative">The gym only needs floor assistants during peak afternoon and early evening hours (12:00 PM – 7:00 PM).</p>
<</replace>>
<<elseif $dailyActivities.workGym.count >= $dailyActivities.workGym.limit>>
<<replace "#gym-job-result">>
<p class="spy-narrative">You've already worked your maintenance shift for today. The head trainer told you to rest up!</p>
<</replace>>
<<elseif $player.energy < 20>>
<<replace "#gym-job-result">>
<p class="spy-narrative">You're too exhausted (need at least 20% energy) to haul heavy plates and clean equipment.</p>
<</replace>>
<<else>>
<<set $dailyActivities.workGym.count += 1>>
<<set $player.energy to Math.max(0, $player.energy - 20)>>
<<run window.AWAC.earn(35)>>
<<run window.AWAC.advanceTime(2)>>
<<run window.AWAC.applyReward({ strength_xp: 10 })>>
<<replace "#gym-job-result">>
<div class="stat-changes-container">
<p>+$35 Wages</p>
<p>+10 Strength XP</p>
<p>-20% Energy</p>
<p>+2 Hours Passed</p>
</div>
<p class="spy-narrative">You spent two hours re-racking heavy 45lb plates, wiping down sweaty benches, and spotting lifters. It was a hard physical grind, but the trainer handed you $35 cash and your muscles feel pumped!</p>
<</replace>>
<<replace "#story-caption">><<include "StoryCaption">><</replace>>
<</if>>
<</link>>
<</if>>
</div>
</div>
<div id="gym-job-result"></div>
<div class="hub-navigation-grid" style="margin-top: 20px;">
<div class="location-item">
<div class="location-overlay">
[[Male Locker Room|MaleLockerRoom]]
</div>
<img src="img/layout/city/gym/male_locker_room.jpg" alt="Male locker room in the gym">
</div>
<div class="location-item">
<div class="location-overlay">
[[Female Locker Room|FemaleLockerRoom]]
</div>
<img src="img/layout/city/gym/female_locker_room.jpg" alt="Female locker room in the gym">
</div>
</div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Gym->CityCenter]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The male locker room is steamy and functional, with lockers lining the walls and the faint echo of showers running.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/gym/male_locker_room.jpg" alt="Male locker room interior">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "MaleLockerRoom">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The male locker room is empty right now.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Return to Gym->Gym]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<<set _showerPhrases to ["The steam fills the air as you rinse off, glimpses of curves through the mist.", "Water cascades, revealing subtle forms in the shared space.", "You relax under the spray, eyes wandering to elegant silhouettes nearby.", "The shower revives you, with hints of intimate moments unfolding.", "Soothing warmth envelops, accompanied by soft sounds of others freshening up.", "Rinsing away the sweat, you catch fleeting views of graceful figures.", "The flow of water brings clarity, amid the allure of nearby bathers.", "You unwind, senses heightened by the steamy environment.", "Cleansing ritual, interrupted by intriguing shadows in the fog.", "Refreshing cleanse, with whispers of sensuality in the air.", "The heat builds, mirroring the subtle tension around you.", "Water beads on skin, highlighting natural beauty in the haze.", "A moment of solitude, shared with enticing presences.", "Steam swirls, unveiling tender scenes in the distance.", "You emerge refreshed, memories of the steamy encounter lingering."]>>
<<set _randomPhrase to _showerPhrases[random(0, _showerPhrases.length - 1)]>>
<div class="dialog-text player">
You step into the shower in the female locker room. <<print _randomPhrase>> Quite the refreshing break!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _randomWebpNum to random(1, 15)>>
<<set _webpPath to "img/layout/city/gym/shower_female_locker_room/shower_" + _randomWebpNum + ".webp">>
<<print '<img src="' + _webpPath + '" alt="Random shower WEBP">'>>
</div>
</div>
<div class="menu-buttons">
[[Return to Female Locker Room->FemaleLockerRoom]]
</div>
</div><div class="game-container">
<<if $player.energy < 15>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Your muscles are trembling with fatigue. You need at least 15% energy to lift heavy weights!
</div>
</div>
<<elseif $dailyActivities.gymTraining.count < $dailyActivities.gymTraining.limit>>
<<set $dailyActivities.gymTraining.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 15)>>
<<set $player.strength += 2>>
<<run window.AWAC.applyReward({ strength_xp: 10 })>>
<<set _statChanges to ["+2 Strength", "+10 Strength XP", "-15% Energy", "+1 Hour Passed"]>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<<set _workoutPhrases to ["You pump iron, catching sight of a fit woman lifting nearby, her form captivating.", "The weights feel good, especially with that sexy trainer demonstrating moves.", "Sweat builds as you spot a hot girl on the bench press, her intensity turning you on.", "You push through reps, eyes drawn to a curvaceous figure squatting deeply.", "The gym vibe is electric, with a stunning woman flexing in the mirror.", "Lifting heavy, you notice a seductive athlete stretching after her set.", "Your muscles burn, but so does the view of that toned beauty on the machines.", "A powerful session, interrupted by glimpses of a voluptuous woman working out hard.", "You grind through the routine, spotting a playful interaction between fit bodies.", "The effort pays off, especially with that alluring woman dominating the free weights."]>>
<<set _randomPhrase to _workoutPhrases[random(0, _workoutPhrases.length - 1)]>>
<div class="dialog-text player">
You dive into a intense workout session at the gym. <<print _randomPhrase>> What a pump!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<if $maxWorkoutWebps is undefined>> <<set $maxWorkoutWebps to 15>> <</if>>
<<set _randomWebpNum to random(1, $maxWorkoutWebps)>>
<<set _webpPath to "img/layout/city/gym/workout/workout_" + _randomWebpNum + ".webp">>
<<print '<img src="' + _webpPath + '" alt="Random workout WEBP">'>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You've already trained enough today. Your muscles need time to recover!
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Gym->Gym]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">The Mall</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/mall.jpg" alt="The shopping mall">
</div>
</div>
<p class="hub-description">
Polished floors, piped-in pop music, the smell of pretzels and perfume. The mall is bright, busy, and full of little shops happy to relieve you of your money.
</p>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">[[Supplement Shop|MallSupplements]]</div>
<img src="img/layout/city/mall_supplements.jpg" alt="Supplement Shop">
</div>
<div class="location-item">
<div class="location-overlay">[[Bookstore|MallBookstore]]</div>
<img src="img/layout/city/mall_bookstore.jpg" alt="Bookstore">
</div>
<div class="location-item">
<div class="location-overlay">[[Gift Boutique|MallGiftShop]]</div>
<img src="img/layout/city/mall_gift.jpg" alt="Gift Boutique">
</div>
<div class="location-item">
<div class="location-overlay">[[Electronics|MallElectronics]]</div>
<img src="img/layout/city/mall_electronics.jpg" alt="Electronics Store">
</div>
<div class="location-item">
<div class="location-overlay">[[Clothing|MallClothing]]</div>
<img src="img/layout/city/mall_clothing.jpg" alt="Clothing store">
</div>
<div class="location-item">
<div class="location-overlay">[[Leave the Mall|CityCenter]]</div>
<img src="img/layout/city/city_center_preview.jpg" alt="Leave the Mall">
</div>
</div>
<<populateLocation "Mall">>
</div><<set $shopContext to { id: "MallSupplements", name: "GainZ Supplements", ret: "Mall" }>>
<<goto "Shop">><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/mall_bookstore.jpg" alt="Dog-Eared Books">
</div>
<p class="spy-narrative">Tall wooden shelves stretch toward the ceiling, smelling of aged paper, fresh ink, and coffee. Dog-Eared Books offers everything from rare poetry to pulp paperbacks and erotic fiction.</p>
</div>
<<if $bookstoreWorkFeedback>>
<div class="mission-task-container" style="margin-top: var(--sp-3);">
<p class="spy-narrative"><<= $bookstoreWorkFeedback>></p>
</div>
<<set $bookstoreWorkFeedback to null>>
<</if>>
<div class="actions-container">
<<link "Browse Books">>
<<set $shopContext to { id: "MallBookstore", name: "Dog-Eared Books", ret: "MallBookstore" }>>
<<goto "Shop">>
<</link>>
<<if $keyEvents.openWorldCarolCity>>
<<link "Work a Shift (2h, $30)">>
<<if $time < 11 or $time > 18>>
<<set $bookstoreWorkFeedback to "Dog-Eared Books only takes on inventory assistants between 11:00 AM and 6:00 PM.">>
<<elseif $dailyActivities.workBookstore.count >= $dailyActivities.workBookstore.limit>>
<<set $bookstoreWorkFeedback to "You've already worked your shift here today. The manager told you to come back tomorrow!">>
<<elseif $player.energy < 10>>
<<set $bookstoreWorkFeedback to "You're too low on energy (need at least 10%) to focus on inventory and shelving books.">>
<<else>>
<<set $dailyActivities.workBookstore.count += 1>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<run window.AWAC.earn(30)>>
<<run window.AWAC.advanceTime(2)>>
<<run window.AWAC.applyReward({ intelligence_xp: 10 })>>
<<set $bookstoreWorkFeedback to "You spent two quiet hours unpacking shipments, organizing reference shelves, and assisting literary shoppers. (+$30, +10 Intelligence XP, -10% Energy, +2 Hours Passed)">>
<</if>>
<<goto "MallBookstore">>
<</link>>
<</if>>
</div>
<<populateLocation "MallBookstore">>
<div class="menu-buttons">
[[Leave the Bookstore|Mall]]
</div>
</div><<set $shopContext to { id: "MallElectronics", name: "Volt Electronics", ret: "Mall" }>>
<<goto "Shop">><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/mall_clothing.jpg" alt="Clothing store">
</div>
<p class="spy-narrative">Racks of dresses, a MANGO sign, fitting rooms in the back. No clerk worth remembering — just customers and mirrors.</p>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/mall_fitting.jpg" alt="Fitting rooms">
</div>
<p class="spy-narrative">The stalls are quiet — curtains, a three-way mirror, a bench nobody sits on unless they mean it.</p>
</div>
<div class="actions-container">
<<link "Browse Clothing & Apparel">>
<<set $shopContext to { id: "MallClothing", name: "MANGO Apparel", ret: "MallClothing" }>>
<<goto "Shop">>
<</link>>
</div>
<<populateLocation "MallClothing">>
<div class="menu-buttons">
[[Leave the shop|Mall]]
</div>
</div>/* Gift shop fronted by a one-act shop assistant (Mia). Vignette: she chats,
nudges sales, leaves a small trace (charisma xp the first time). */
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/mall_gift.jpg" alt="Gift Boutique interior">
</div>
<p class="spy-narrative">The gift boutique is all ribbon and soft lighting. Behind the counter, a bright-eyed assistant with a name tag reading "Mia" looks up and smiles.</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$faces.mia" alt="Mia">
</div>
<div class="dialog-text assistant">
<<if not $keyEvents.metMia>>
Hi! First time in? Looking for something for someone special, or just treating yourself? We've got flowers, chocolates, the works.
<<else>>
Back again! Let me know if you need a hand picking something out.
<</if>>
</div>
</div>
<<if not $keyEvents.metMia>>
<<set $keyEvents.metMia to true>>
<<run window.AWAC.applyReward({ charisma_xp: 6 })>>
<p class="spy-narrative">(You chat for a minute. She's easy to talk to — you leave feeling a little more at ease with strangers.)</p>
<</if>>
<div class="actions-container">
<<link "Browse the Gifts">>
<<set $shopContext to { id: "MallGiftShop", name: "Mia's Gift Boutique", ret: "MallGiftShop" }>>
<<goto "Shop">>
<</link>>
</div>
<<populateLocation "MallGiftShop">>
<div class="menu-buttons">
[[Leave|Mall]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">The Neighborhood</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="A quiet suburban street">
</div>
</div>
<p class="hub-description">
The street is lined with well-manicured lawns and cozy-looking houses. You can feel eyes on you from behind curtained windows. Each house holds its own secrets.
</p>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">
[[Carol's House|CarolHouse]]
</div>
<img src="img/layout/house/house.jpg" alt="Aunt Carol's House">
</div>
<div class="location-item">
<div class="location-overlay">
[[Angela's House|AngelaHouse]]
</div>
<img src="img/layout/angela_house/house_flower.webp" alt="Angela's House">
</div>
<div class="location-item">
<div class="location-overlay">
[[Brandi's House|BrandiHouse]]
</div>
<img src="img/layout/brandi_house/brandi_house_preview.jpg" alt="Brandi's House">
</div>
<div class="location-item">
<div class="location-overlay">
[[Valerie's House|ValerieHouse]]
</div>
<img src="img/layout/valerie_house/valerie_house_preview.jpg" alt="Valerie's House">
</div>
<div class="location-item">
<div class="location-overlay">
[[Jenna's House|JennaHouse]]
</div>
<img src="img/layout/jenna_house/jenna_house_preview.jpg" alt="Jenna's House">
</div>
<div class="location-item">
<div class="location-overlay">
[[Visit Store|LocalStore]]
</div>
<img src="img/layout/store/store_outside.jpg" alt="Local Store">
</div>
<div class="location-item">
<div class="location-overlay">
[[Back to Street View|Outside]]
</div>
<img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="Back to Street View">
</div>
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title" style="color: #FF6347;">The Outskirts</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/outskirts_preview.jpg" alt="The decaying industrial outskirts of the city at dusk">
</div>
</div>
<p class="hub-description" style="color: #c0a0a0;">
You've reached the edge of the city, the part Aunt Carol warned you about. The air is heavy, the buildings are crumbling monuments to forgotten industry. Every shadow seems to hold a secret, and every distant noise sounds like a threat. This place is dangerous, but it also hums with a raw, unfiltered energy. For now, perhaps it's best to heed Carol's warning...
</p>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">
[[The Pit|ThePit]]
</div>
<img src="img/layout/outskirts/warehouse.jpg" alt="A large, abandoned warehouse">
</div>
<div class="location-item">
<div class="location-overlay">
[[The Alley|TheAlley]]
</div>
<img src="img/layout/outskirts/alley.jpg" alt="A dark and menacing back alley">
</div>
<div class="location-item">
<div class="location-overlay">
[[Sleepy Hollow Motel|SleepyHollowMotel]]
</div>
<img src="img/layout/outskirts/motel.jpg" alt="A rundown roadside motel with a flickering neon sign">
</div>
<div class="location-item">
<div class="location-overlay">
[[The Velvet Curtain|VelvetCurtain]]
</div>
<img src="img/layout/outskirts/strip_club.jpg" alt="A nondescript building with a single red light above the door">
</div>
<div class="location-item">
<div class="location-overlay">
[[Leave the Outskirts|Outside]]
</div>
<img src="img/layout/house/house.jpg" alt="Return to the relative safety of the suburbs">
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/strip_club.jpg" alt="The Velvet Curtain">
</div>
<p class="spy-narrative">Red light, sticky floors, a bass line you feel in your teeth. The Velvet Curtain isn't classy, but it's warm and it's loud and nobody asks questions.</p>
</div>
<<populateLocation "VelvetCurtain">>
<<set _sched to $openWorldGirls.roxy.weeklySchedule[$actualDay]>>
<<if not (_sched and _sched.VelvetCurtain and (($time >= _sched.VelvetCurtain.start) or ($time <= _sched.VelvetCurtain.end)))>>
<p class="mission-narrative-focus">The stage is dark right now. Roxy works nights — come back after 8 PM.</p>
<</if>>
<div class="menu-buttons">
[[Leave|Outskirts]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/apartments_luxury.jpg" alt="The Highrise at night">
</div>
<p class="spy-narrative">The cab ride is quiet. Roxy stares out the window, mascara a little smudged, the armor of the night coming off mile by mile. She doesn't usually let anyone this close.</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy">
This is me. The Highrise — penthouse, if you can believe it. Don't ask who pays for it. <<if $openWorldGirls.roxy.love >= 30>>...If you ever want to come by in the daytime, when I'm actually human, the buzzer's PH. Don't make me regret telling you.<</if>>
</div>
</div>
<<silently>>
<<set $keyEvents.roxyAddressKnown to true>>
<<set $openWorldGirls.roxy.love += 5>>
<</silently>>
<p class="spy-narrative">(You've learned Roxy's address. You can visit her at The Highrise — penthouse — when she's home during the day.)</p>
<div class="menu-buttons">
[[Head home->CarolHouse]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title" style="color:#FF6347;">The Alley</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/alley.jpg" alt="A dark back alley">
</div>
</div>
<p class="hub-description">
A dead-end between two dead buildings. A man in a hoodie leans against the brick beside a duffel bag of things that fell off the back of a truck. He nods at you — buying or browsing?
</p>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.dealer" alt="Dealer"></div>
<div class="dialog-text gang">
You want gear, I got gear. Cash only. And if Rina sent you about the other thing — you'll need to prove you're not a cop first. Win a few in the Pit. Word travels.
</div>
</div>
<div class="actions-container">
<<link "Browse the Black Market">>
<<set $shopContext to { id: "BlackMarket", name: "The Alley (Black Market)", ret: "TheAlley" }>>
<<goto "Shop">>
<</link>>
</div>
<<populateLocation "TheAlley">>
<div class="menu-buttons">
[[Leave the Alley|Outskirts]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title" style="color:#FF6347;">"Sleepy Hollow" Motel</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/motel.jpg" alt="A rundown motel">
</div>
</div>
<p class="hub-description">
A flickering neon sign, a clerk behind bulletproof glass, and a row of doors that have seen things. Rooms by the hour. This is where deals get made and people disappear for an evening.
</p>
/* One-act vignette: Lacey, a runaway who needs a small favor. Leaves a
street-rep trace once, then becomes ambient. Template for transient NPCs. */
<<if not $keyEvents.metLacey>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.lacey" alt="Lacey"></div>
<div class="dialog-text gang">
Hey — you don't look like the usual crowd. Could you spot me for the room tonight? I'm good for it, I just... can't go home. I'll remember you did this.
</div>
</div>
<div class="actions-container">
<<if $player.money >= 40>>
<<link "Cover her room ($40)">>
<<run window.AWAC.spend(40)>>
<<set $keyEvents.metLacey to true>>
<<run window.AWAC.applyReward({ street: 8 })>>
<<goto "SleepyHollowMotel">>
<</link>>
<</if>>
<<link "Not your problem">>
<<set $keyEvents.metLacey to true>>
<<goto "SleepyHollowMotel">>
<</link>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$faces.motelClerk" alt="Motel clerk"></div>
<div class="dialog-text gang">
Thirty-five. Cash. You want the room or you want to stand there?
</div>
</div>
<</if>>
<<populateLocation "SleepyHollowMotel">>
<div class="wallet-bar"><span>💰 $<<= $player.money>></span></div>
<div class="actions-container">
<<if $player.money >= 35>>
<<link "Rent a room ($35)">>
<<run window.AWAC.spend(35)>>
<<goto "MotelRoom">>
<</link>>
<<else>>
<span class="action-button disabled">Rent a room ($35) — not enough cash</span>
<</if>>
</div>
<div class="menu-buttons">
[[Leave the Motel|Outskirts]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/motel_room.jpg" alt="Motel room">
</div>
<p class="spy-narrative">A bed that has opinions, a lamp that buzzes, curtains that don't quite meet. Yours until you walk out.</p>
</div>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">[[Bathroom|MotelBath]]</div>
<img src="img/layout/outskirts/motel_bath.jpg" alt="Motel bathroom">
</div>
</div>
<div class="exclusive-actions">
<h3>The room</h3>
<div class="actions-container">
<<if $time >= 21 || $time < 6>>
<<link "Sleep here" "SleepSequence">><</link>>
<<else>>
<span class="action-button disabled">Sleep here (wait until 21:00)</span>
<</if>>
</div>
</div>
<div class="menu-buttons">
[[Leave the room|SleepyHollowMotel]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/outskirts/motel_bath.jpg" alt="Motel bathroom">
</div>
<p class="spy-narrative">Stained tile, a shower that works if you don't ask questions. You wash the road off and that's the whole story.</p>
</div>
<div class="menu-buttons">
[[Back to the room|MotelRoom]]
</div>
</div><div class="game-container">
<<if $player.energy < 12>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You're too tired to play basketball right now. You need at least 12% energy for a game!
</div>
</div>
<<elseif $dailyActivities.playBasketball.count < $dailyActivities.playBasketball.limit>>
<<set $dailyActivities.playBasketball.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $player.athleticism += 2>>
<<run window.AWAC.applyReward({ strength_xp: 5 })>>
<<set _statChanges to ["+2 Athleticism", "+5 Strength XP", "-12% Energy", "+1 Hour Passed"]>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<<set _basketPhrases to ["You join a game with a stunning woman, feeling the intensity build.", "The court heats up as you match moves with a sexy opponent.", "Playing one-on-one, her athletic grace catches your eye.", "You guard her closely, the energy between you electric.", "She dribbles and shoots, making every moment thrilling.", "The game flows with playful competition and subtle tension."]>>
<<set _randomPhrase to _basketPhrases[random(0, _basketPhrases.length - 1)]>>
<div class="dialog-text player">
You hit the courts for a game of basketball with a hot woman. <<print _randomPhrase>> What a workout!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _randomGifNum to random(1, 6)>>
<<set _gifPath to "img/chars/random/girls_play_basketball/basketball_" + _randomGifNum + ".webp">>
<<print '<img src="' + _gifPath + '" alt="Random basketball GIF">'>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You've played enough basketball today. Time to cool down and rest!
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Courts->ParkCourts]]
</div>
</div><div class="game-container">
<<if $dailyActivities.feedDucks.count < $dailyActivities.feedDucks.limit>>
<<set $dailyActivities.feedDucks.count += 1>>
<<set _luckRoll to random(1, 100)>>
<<set _outcome to "neutral">>
<<if _luckRoll <= 30 - $player.luck>> <!-- Alta chance de ruim com luck baixa (ex: luck 0 = 30% chance ruim) -->
<<set _outcome to "bad">>
<<set $player.animalCare -= 2>>
<<set _statChanges to ["-2 Animal Care (The ducks chased you!)"]>>
<<elseif _luckRoll <= 70 + $player.luck * 2>> <!-- Chance de neutro, ajustada por luck -->
<<set _outcome to "neutral">>
<<set $player.animalCare += 1>>
<<set _statChanges to ["+1 Animal Care (Ducks ate peacefully.)"]>>
<<else>> <!-- Alta chance de bom com luck alta (ex: luck 10 = chance >70% bom) -->
<<set _outcome to "good">>
<<set $player.animalCare += 2>>
<<set $player.lust += 10>>
<<set _statChanges to ["+2 Animal Care", "+10 Lust (A woman gave you a handjob!)"]>>
<</if>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<if _outcome is "bad">>
You tried to feed the ducks, but they got aggressive and chased you around the lake! Not your best moment.
<<elseif _outcome is "good">>
As you fed the ducks, a mysterious woman approached, sat beside you, and things got intimate – she gave you an unforgettable handjob right there on the bench!
<<else>>
The ducks happily ate the food you tossed. A calm and satisfying experience.
<</if>>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _randomNum to random(1, 3)>>
<<if _outcome is "bad">>
<<set _imgPath to "img/etc/running_ducks/running_duck_" + _randomNum + ".webm">>
<<print '<video autoplay loop muted playsinline src="' + _imgPath + '" style="pointer-events: none;" alt="Running ducks"></video>'>>
<<elseif _outcome is "good">>
<<set _imgPath to "img/chars/random/girls_handjob_at_park_lake/handjob_park_lake_" + _randomNum + ".webp">>
<<print '<img src="' + _imgPath + '" alt="Handjob at park lake">'>>
<<else>>
<<set _imgPath to "img/etc/feed_ducks/feed_duck_" + _randomNum + ".webm">>
<<print '<video autoplay loop muted playsinline src="' + _imgPath + '" style="pointer-events: none;" alt="Feeding ducks"></video>'>>
<</if>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You've already fed the ducks today. They're full – come back tomorrow!
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Bench->ParkLakeBench]]
</div>
</div><div class="game-container">
<<if $dailyActivities.observationParkLake.count < $dailyActivities.observationParkLake.limit>>
<<set $dailyActivities.observationParkLake.count += 1>>
<<set $player.observation += 2>>
<<set _statChanges to ["+2 Observation"]>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<<set _observePhrases to ["From your spot, you catch glimpses of couples lost in their own world.", "You notice pairs getting cozy, sharing intimate moments by the lake.", "Distant figures seem wrapped up in passion, oblivious to surroundings.", "Couples appear to be enjoying each other's company in playful ways.", "You spot some heated interactions unfolding in the shadows.", "Pairs are getting affectionate, making the most of the serene setting.", "From afar, you see sparks flying between lovers.", "Intimate encounters catch your eye, hidden among the trees.", "Couples are indulging in private fun, adding excitement to the view.", "You observe tender and wild moments shared between partners."]>>
<<set _randomPhrase to _observePhrases[random(0, _observePhrases.length - 1)]>>
<div class="dialog-text player">
You settle on the bench to observe people around the lake. <<print _randomPhrase>> It's quite the sight!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<if $maxObservationGifs is undefined>> <<set $maxObservationGifs to 5>> <</if>>
<<set _randomGifNum to random(1, $maxObservationGifs)>>
<<set _gifPath to "img/chars/random/couples_observation_park_lake/couples_observation_" + _randomGifNum + ".webp">>
<<print '<img src="' + _gifPath + '" alt="Random couple observation GIF">'>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You've observed enough people for today. Your eyes need a rest – time to move on!
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Bench->ParkLakeBench]]
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">The Park</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/park/park_preview.jpg" alt="A sprawling city park on a sunny day">
</div>
</div>
<p class="hub-description">
The city park is a sprawling expanse of green. You can hear the distant laughter of children, the rhythmic thud of a basketball, and the soft crunch of gravel under joggers' feet. It feels alive with possibilities, both innocent and otherwise.
</p>
<<populateLocation "Park">>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">
[[Running Trail|ParkTrail]]
</div>
<img src="img/layout/park/trail.jpg" alt="A winding running trail through the trees">
</div>
<div class="location-item">
<div class="location-overlay">
[[Lake Bench|ParkLakeBench]]
</div>
<img src="img/layout/park/lake_bench.jpg" alt="A secluded bench overlooking a small lake">
</div>
<div class="location-item">
<div class="location-overlay">
[[Playground|ParkPlayground]]
</div>
<img src="img/layout/park/playground.jpg" alt="A colorful children's playground">
</div>
<div class="location-item">
<div class="location-overlay">
[[Sports Courts|ParkCourts]]
</div>
<img src="img/layout/park/courts.jpg" alt="Basketball and tennis courts">
</div>
<div class="location-item">
<div class="location-overlay">
[[Leave Park|Outside]]
</div>
<img src="img/layout/house/house.jpg" alt="Leave the park area">
</div>
</div>
<div id="park-event-container">
<<silently>>
<<set _availableEventsPark to []>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _eventId, _event range $events>>
<<if _event.location is "Park" and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">> <<set _eventReqMet to ($missions[_event.requirements.id] && $missions[_event.requirements.id].status === 1)>>
<<elseif _event.requirements.type is "scene">> <<set _eventReqMet to ($scenes[_event.requirements.id] && $scenes[_event.requirements.id].status === 1)>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsPark.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</silently>>
<<if _availableEventsPark.length > 0>>
<div class="hub-event-list-container">
<h3>! Special Events Happening !</h3>
<<for _i, _eventData range _availableEventsPark>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The sports courts buzz with activity. Basketball hoops clang with missed shots, and tennis rackets slice through the air. It's a place of energy and competition.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/park/courts.jpg" alt="Basketball and tennis courts">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "ParkCourts">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The sports courts are empty right now. Just the echo of silence.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div class="interaction-list">
<h3>Available Interactions</h3>
<div class="interaction-options">
[[Play Basketball|BasketballParkCourts]]
[[Do Yoga|YogaParkCourts]]
</div>
</div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Return to Park->Park]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
A secluded bench overlooks a small, serene lake. The water reflects the sky, and the quiet is broken only by the occasional ripple from a fish. It's a peaceful spot to think.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/park/lake_bench.jpg" alt="A secluded bench overlooking a small lake">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "ParkLakeBench">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The lake bench is empty right now. Just the sound of water.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div class="interaction-list">
<h3>Available Interactions</h3>
<div class="interaction-options">
[[Observe People|ObservationParkLake]]
[[Feed Ducks|FeedDucksParkLake]]
</div>
</div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Return to Park->Park]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The playground is alive with the sound of children laughing and playing. Bright colors and swings fill the air with a sense of carefree joy.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/park/playground.jpg" alt="A colorful children's playground">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "ParkPlayground">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The playground is empty right now. Just the silence of swings.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Return to Park->Park]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The running trail is quiet, save for the sound of my own footsteps and the wind in the trees. I wonder who I might run into here.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/park/trail.jpg" alt="A winding running trail through the trees">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "ParkTrail">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<if def $openWorldGirls>><<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>><</if>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<if def $openWorldGirls>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
/* LÓGICA PARA RANDOM ENCOUNTERS (INTEGRADA E CORRIGIDA) */
<<if def $randomEncounters>>
<<for _charKey, _charData range $randomEncounters>>
<<if !$peoplePresent[_charKey]>> /* Garante que não sobreponha um personagem principal */
<<for _missionKey, _missionData range _charData.missions>>
<<if _missionData.location is $locationName and _missionData.status is 0 and Array.isArray(_missionData.day) and _missionData.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _missionData.period is "string" and _missionData.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<if Array.isArray(_missionData.period) and _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
/* Verificação de requisitos completa para random encounters */
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set $peoplePresent[_charKey] to { type: "random", data: _charData }>>
<<break>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</for>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes(_currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _reqMet to false>>
<<if _event.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<addLocationExtras>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The trail is empty right now. Just you and your thoughts.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div class="interaction-list">
<h3>Available Interactions</h3>
<div class="interaction-options">
[[Run|RunningPark]]
[[Photograph Nature|PhotoNaturePark]]
</div>
</div>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Trail->Park]]
</div>
</div><div class="game-container">
<<if $dailyActivities.photography.count < $dailyActivities.photography.limit>>
<<set $dailyActivities.photography.count += 1>>
<<set $player.photography += 2>>
<<set _statChanges to ["+2 Photography"]>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You decided to photograph nature along the trail. During your session, you managed to snap some shots of a few girls... some quite revealing!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<if $maxNaturePhotos is undefined>> <<set $maxNaturePhotos to 13>> <</if>>
<<set _randomPhoto1Num to random(1, $maxNaturePhotos)>>
<<set _randomPhoto2Num to random(1, $maxNaturePhotos)>>
<<if _randomPhoto1Num is _randomPhoto2Num>>
<<set _randomPhoto2Num to (_randomPhoto2Num % $maxNaturePhotos) + 1>>
<</if>>
<<set _photoPath1 to "img/chars/random/girls_nature_photo/nature_" + _randomPhoto1Num + ".jpg">>
<<set _photoPath2 to "img/chars/random/girls_nature_photo/nature_" + _randomPhoto2Num + ".jpg">>
<<print '<img class="nature-photo" src="' + _photoPath1 + '" alt="Random nature girl photo 1">'>>
<<print '<img class="nature-photo" src="' + _photoPath2 + '" alt="Random nature girl photo 2">'>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You've taken enough photos today. Your camera is overheating – time to give it a break!
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Trail->ParkTrail]]
</div>
</div><div class="game-container">
<<if $player.energy < 12>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You're too exhausted for a run. Catch your breath and recover some energy first!
</div>
</div>
<<elseif $dailyActivities.running.count < $dailyActivities.running.limit>>
<<set $dailyActivities.running.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $player.running += 2>>
<<run window.AWAC.applyReward({ strength_xp: 5 })>>
<<set _statChanges to ["+2 Running", "+5 Strength XP", "-12% Energy", "+1 Hour Passed"]>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<<set _runPhrases to ["While running, you spotted a hot girl jogging nearby.", "As you ran, a gorgeous runner caught your eye.", "Mid-run, you noticed a stunning woman keeping pace.", "While jogging, you saw a sexy figure running ahead.", "During your run, a beautiful jogger passed by."]>>
<<set _randomPhrase to _runPhrases[random(0, _runPhrases.length - 1)]>>
<div class="dialog-text player">
You went for a run along the trail. <<print _randomPhrase>> Feel the adrenaline!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<if $maxRunningVideos is undefined>> <<set $maxRunningVideos to 5>> <</if>>
<<set _randomVideoNum to random(1, $maxRunningVideos)>>
<<set _videoPath to "img/chars/random/girls_running/girl_running_" + _randomVideoNum + ".webm">>
<<print '<video autoplay loop muted playsinline src="' + _videoPath + '" style="pointer-events: none;" alt="Random girl running"></video>'>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You've already run enough today. Time to rest and recover your energy!
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Trail->ParkTrail]]
</div>
</div><div class="game-container">
<<if $player.energy < 8>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You're too low on energy to properly focus and hold yoga poses. Take a breather first!
</div>
</div>
<<elseif $dailyActivities.yogaParkCourt.count < $dailyActivities.yogaParkCourt.limit>>
<<set $dailyActivities.yogaParkCourt.count += 1>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<set $player.lust to Math.max(0, $player.lust - 15)>>
<<set $player.flexibility += 2>>
<<run window.AWAC.applyReward({ charisma_xp: 5 })>>
<<set _statChanges to ["+2 Flexibility", "+5 Charisma XP", "-15% Lust", "-8% Energy", "+1 Hour Passed"]>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<<set _yogaPhrases to ["You join the group, flowing through poses with graceful women around.", "The session stretches your body, surrounded by flexible figures.", "Breathing deep, you match the rhythmic movements of the class.", "Poses unfold, creating a serene yet charged atmosphere.", "You feel the pull and release, eyes drawn to elegant forms.", "The group moves in harmony, blending relaxation and subtle allure."]>>
<<set _randomPhrase to _yogaPhrases[random(0, _yogaPhrases.length - 1)]>>
<div class="dialog-text player">
You join a yoga session with a group of women on the courts. <<print _randomPhrase>> So relaxing and invigorating!
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<<set _randomGifNum to random(1, 6)>>
<<set _gifPath to "img/chars/random/girls_yoga_park/yoga_" + _randomGifNum + ".webp">>
<<print '<img src="' + _gifPath + '" alt="Random yoga GIF">'>>
</div>
</div>
<div class="stat-changes-container">
<<for _change range _statChanges>>
<p><<print _change>></p>
<</for>>
</div>
<<else>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
You've done enough yoga today. Your body needs time to recover!
</div>
</div>
<</if>>
<div class="menu-buttons">
[[Return to Courts->ParkCourts]]
</div>
</div><<if ndef $paigeFitStep>><<set $paigeFitStep to 0>><</if>>
<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Help Her Pick an Outfit</p>
<p class="mission-narrative-focus">A married woman in the clothing store, stuck between racks, shopping for a date with her husband. She wants an opinion. Yours.</p>
<<if $paigeFitStep is 0>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_pink_set.png" alt="Pink set">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.fittingRoomGirl.face" alt="Paige"></div>
<div class="dialog-text paige">I have dinner with my husband. This is already too much, right? Be honest.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">It looks like you already know it isn't for him.</div>
</div>
<div class="menu-buttons">
<<link "See the next one">>
<<set $paigeFitStep to 1>>
<<goto "PaigeFittingHelp">>
<</link>>
</div>
<<elseif $paigeFitStep is 1>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_black_dress.png" alt="Black dress">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.fittingRoomGirl.face" alt="Paige"></div>
<div class="dialog-text paige">Okay, black. Too much for dinner? Don't look at me like that.</div>
</div>
<div class="menu-buttons">
<<link "Tell her it fits">>
<<set $paigeFitStep to 2>>
<<goto "PaigeFittingHelp">>
<</link>>
</div>
<<elseif $paigeFitStep is 2>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_navy_back.png" alt="Navy back">
</div>
</div>
<p class="spy-narrative">She turns. The navy lace. She asks if the set looks good and already knows the answer.</p>
<div class="menu-buttons">
<<link "Ask to see the front">>
<<set $paigeFitStep to 3>>
<<goto "PaigeFittingHelp">>
<</link>>
</div>
<<elseif $paigeFitStep is 3>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_navy_front.png" alt="Navy front">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.fittingRoomGirl.face" alt="Paige"></div>
<div class="dialog-text paige">This is not for him. You know that. One more.</div>
</div>
<div class="menu-buttons">
<<link "See the red">>
<<set $paigeFitStep to 4>>
<<goto "PaigeFittingHelp">>
<</link>>
</div>
<<else>>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/paige/sumiko_fitting_red_lingerie.png" alt="Red lingerie">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$randomEncounters.fittingRoomGirl.face" alt="Paige"></div>
<div class="dialog-text paige">If I take this off in there, I don't think we're talking about dinner anymore.</div>
</div>
<p class="spy-narrative">The stall door is open. She is waiting to see if you follow.</p>
<div class="menu-buttons">
<<link "Follow her in">>
<<set $randomEncounters.fittingRoomGirl.missions.fittingHelp.status to 1>>
<<set $paigeFitStep to 0>>
<<run window.AWAC.applyReward({ lust: 4 })>>
<<goto "PaigeFittingRoom">>
<</link>>
</div>
<</if>>
</div><div class="game-container spy-scene-container">
<div id="paige-fitting-room-content"></div>
</div><<approachCharacter "randomEncounters.fittingRoomGirl">><<silently>>
<<set _approach to [
"She's back at the racks with a dress over her arm, pretending this is still about dinner.",
"The fitting rooms are half-empty. She sees you and does not pretend she doesn't.",
"\"Don't say my name,\" she murmurs. \"Just tell me if this one is worse.\""
].random()>>
<<set _during to [
"The stall again. Guilty, fast, her husband still the excuse she does not believe.",
"She laughs into her hand so the shop floor will not hear it.",
"Navy lace on the hook. The date is not getting this one."
].random()>>
<<set _outcome to [
"She straightens her dress. \"I have to go. If you see me out there, you were helping me pick a size.\"",
"She does not kiss you. She squeezes your wrist and leaves first.",
"\"Don't follow me to the register.\""
].random()>>
<<set _video to $scenes["PS001"].replay.videos.random()>>
<<applyReplay "PS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Paige" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the shop->MallClothing]]
</div>
</div><<silently>>
<<set $openWorldGirls.roxy.dailyInteractions.talk = ($openWorldGirls.roxy.dailyInteractions.talk || 0) + 1>>
<<set $openWorldGirls.roxy.love = ($openWorldGirls.roxy.love || 0) + 1>>
<<set $openWorldGirls.roxy.trust = ($openWorldGirls.roxy.trust || 0) + 1>>
<</silently>>
<div class="game-container">
<<set _opts to [
{ roxy: "You actually want to talk? Not what most guys come here for.", player: "Maybe I'm not most guys." },
{ roxy: "This town chews people up. Stick around long enough and you'll see.", player: "I'm a fast learner." },
{ roxy: "Careful getting friendly with me. I'm a bad habit.", player: "I've had worse." }
]>>
<<set _d to _opts.random()>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy"><<= _d.roxy>></div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player"><<= _d.player>></div>
</div>
<p class="spy-narrative">She studies you for a second longer than she means to, then looks away.</p>
<div class="menu-buttons">
<<link "Step away">><<goto $locationName>><</link>>
</div>
</div><<silently>>
<<set $openWorldGirls.roxy.dailyInteractions.flirt = ($openWorldGirls.roxy.dailyInteractions.flirt || 0) + 1>>
<<set $openWorldGirls.roxy.love = ($openWorldGirls.roxy.love || 0) + 1>>
<<set $openWorldGirls.roxy.lust = ($openWorldGirls.roxy.lust || 0) + 2>>
<<set $openWorldGirls.roxy.corruption = ($openWorldGirls.roxy.corruption || 0) + 1>>
<</silently>>
<div class="game-container">
<<set _opts to [
{ roxy: "Flattery's cheap, sweetheart. But keep going, it's a slow night.", player: "Then let me make it interesting." },
{ roxy: "You think you can afford me?", player: "I think you'd give me a discount." }
]>>
<<set _d to _opts.random()>>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy"><<= _d.roxy>></div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player"><<= _d.player>></div>
</div>
<p class="spy-narrative">A real smile cracks through the practiced one — just for a beat.</p>
<div class="menu-buttons">
<<link "Step away">><<goto $locationName>><</link>>
</div>
</div><<approachCharacter "openWorldGirls.roxy">><<if $keyEvents.roxyDanceDone>>
<div class="game-container">
<p class="spy-narrative">You've already seen the free set. The rest is a different night and a different number.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div>
<<else>>
<div class="game-container spy-scene-container">
<div id="roxy-dance-content"></div>
</div>
<</if>><<if not $keyEvents.roxyDanceDone>>
<div class="game-container">
<p class="spy-narrative">She hasn't even sold you the dance yet. The booth is later.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div>
<<elseif $openWorldGirls.roxy.lastSetDay is $actualDay>>
<<goto "RoxyTooSoon">>
<<elseif $player.money lt 40>>
<<goto "RoxyNoCash">>
<<else>>
<<silently>>
<<run window.AWAC.spend(40)>>
<</silently>>
<div class="game-container spy-scene-container">
<div class="wallet-bar"><span>💰 $<<= $player.money>></span></div>
<div id="roxy-private-content"></div>
</div>
<</if>><<if not $keyEvents.roxyPrivateDone>>
<div class="game-container">
<p class="spy-narrative">She hasn't sold you the private room yet. This is the night after that.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div>
<<elseif $openWorldGirls.roxy.lastSetDay is $actualDay>>
<<goto "RoxyTooSoon">>
<<elseif $player.money lt 60>>
<<goto "RoxyNoCash">>
<<else>>
<<silently>>
<<run window.AWAC.spend(60)>>
<</silently>>
<div class="game-container spy-scene-container">
<div class="wallet-bar"><span>💰 $<<= $player.money>></span></div>
<div id="roxy-sex-content"></div>
</div>
<</if>><<if not $keyEvents.roxyChampagneDone>>
<div class="game-container">
<p class="spy-narrative">She shakes her head before you finish asking. The rain set is a specialty. Champagne first — and not the same night.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div>
<<elseif $openWorldGirls.roxy.lastSetDay is $actualDay>>
<<goto "RoxyTooSoon">>
<<elseif $player.money lt 80>>
<<goto "RoxyNoCash">>
<<else>>
<<silently>>
<<run window.AWAC.spend(80)>>
<</silently>>
<div class="game-container spy-scene-container">
<div class="wallet-bar"><span>💰 $<<= $player.money>></span></div>
<div id="roxy-rain-content"></div>
</div>
<</if>><div class="game-container">
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy">That's the set. I don't stack nights. Come back tomorrow with the rest of the cash.</div>
</div>
<p class="spy-narrative">She is already looking past you. Tonight is closed.</p>
<div class="menu-buttons">[[Back to the floor->VelvetCurtain]]</div>
</div><<if not $keyEvents.roxyDanceDone>>
<<goto "RoxyStageDance">>
<<elseif not $keyEvents.roxyPrivateDone>>
<<goto "RoxyPrivateRoom">>
<<elseif not $keyEvents.roxyChampagneDone>>
<<goto "RoxyChampagneSex">>
<<else>>
<<goto "RoxyRainRoom">>
<</if>><<silently>>
<<set _approach to [
"Same pole. She doesn't greet you. The dance is still the cheap look.",
"\"Sit. This part's still the show.\"",
"Lights, fishnets, no booth. She clocks that you came back for the free side."
].random()>>
<<set _during to [
"She works the chrome like you are not special. You aren't.",
"The song ends where it always ends: before the room.",
"Hands to yourself. That was the deal the first night too."
].random()>>
<<set _outcome to [
"She points at the booth with her chin. \"That's extra. Another night.\"",
"Back to the rail. Tomorrow's tab is still tomorrow.",
"\"You know the price of the rest.\""
].random()>>
<<set _video to $scenes["RX001"].replay.videos.random()>>
<<applyReplay "RX001">>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Roxy" style="max-width: 640px; border-radius: 8px;">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div><<silently>>
<<if $player.money lt 40>>
<<goto "RoxyNoCash">>
<<else>>
<<run window.AWAC.spend(40)>>
<<set _approach to [
"She counts forty and nods at the booth.",
"\"Private's a menu item. Sit.\"",
"Cash first. Then the door. Same as last time."
].random()>>
<<set _during to [
"Red tuft. Mouth. No sex. That's another night.",
"She works you like a tab.",
"The booth smells like perfume and money."
].random()>>
<<set _outcome to [
"She wipes her mouth. \"The rest is sixty. Not tonight.\"",
"Door. Floor. Tomorrow.",
"She is already looking past you."
].random()>>
<<set _video to $scenes["RX003"].replay.videos.random()>>
<<applyReplay "RX003">>
<</if>>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Roxy" style="max-width: 640px; border-radius: 8px;">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div><<silently>>
<<if $player.money lt 60>>
<<goto "RoxyNoCash">>
<<else>>
<<run window.AWAC.spend(60)>>
<<set _approach to [
"She doesn't greet you. She points at the booth.",
"\"You already bought the mouth. This is the rest.\"",
"Sixty. Then the booth is a bed again."
].random()>>
<<set _during to [
"Pink fishnets. Red tuft. You are paying to finish what another night started.",
"No small talk. She is on the clock.",
"The booth smells like perfume and money."
].random()>>
<<set _outcome to [
"She is already looking past you for the next tab.",
"\"Rain's extra. Different night.\"",
"She wipes her mouth and goes back to the pole."
].random()>>
<<set _video to $scenes["RX004"].replay.videos.random()>>
<<applyReplay "RX004">>
<</if>>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Roxy" style="max-width: 640px; border-radius: 8px;">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div><<silently>>
<<if $player.money lt 80>>
<<goto "RoxyNoCash">>
<<else>>
<<run window.AWAC.spend(80)>>
<<set _approach to [
"Purple rain. She is already wet. She holds out a palm.",
"\"Specialty. You know the price.\"",
"No vinyl umbrella for free. She waits."
].random()>>
<<set _during to [
"Tinsel, pole, water. She treats you like weather.",
"The SLUT tattoo. The boots. The bill.",
"You paid for the rain. She delivers the rain."
].random()>>
<<set _outcome to [
"She wrings her hair out. Next.",
"\"Don't get sentimental in my rain.\"",
"You leave damper than you arrived."
].random()>>
<<set _video to $scenes["RX002"].replay.videos.random()>>
<<applyReplay "RX002">>
<</if>>
<</silently>>
<div class="game-container">
<p class="spy-narrative"><<= _approach>></p>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Roxy" style="max-width: 640px; border-radius: 8px;">
</div>
</div>
<p class="spy-narrative"><<= _during>></p>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div><div class="game-container">
<div class="wallet-bar"><span>💰 $<<= $player.money>></span></div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$openWorldGirls.roxy.face" alt="Roxy"></div>
<div class="dialog-text roxy">That's cute. Come back with cash.</div>
</div>
<div class="menu-buttons">
[[Back to the floor->VelvetCurtain]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/livingroom.jpg" alt="Skylar living room">
</div>
<p class="spy-narrative">Fairy lights, a worn couch, paperbacks stacked under the side table. Her living room smells like tea and laundry soap.</p>
</div>
<<populateLocation "LivingRoomSkylar">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Empty for now. Try evenings after her shift.</p>
<</if>>
<div class="hub-navigation-grid" style="margin-top:16px;">
<div class="location-item">
<div class="location-overlay">[[Bedroom|BedroomSkylar]]</div>
<img src="img/layout/skylar_apt/bedroom.jpg" alt="Bedroom">
</div>
<div class="location-item">
<div class="location-overlay">[[Bathroom|BathroomSkylar]]</div>
<img src="img/layout/skylar_apt/bathroom.jpg" alt="Bathroom">
</div>
<div class="location-item">
<div class="location-overlay">[[Balcony|BalconySkylar]]</div>
<img src="img/chars/skylar/balcony/skylar_balcony_front.webp" alt="Balcony">
</div>
<div class="location-item">
<div class="location-overlay">[[Apartment door|ApartmentSkylar]]</div>
<img src="img/layout/skylar_apt/hub.jpg" alt="Hub">
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/bedroom.jpg" alt="Skylar bedroom">
</div>
<p class="spy-narrative">A small bedroom with soft sheets and a pile of work shirts waiting for the iron. The city hums through the blinds.</p>
</div>
<<populateLocation "BedroomSkylar">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">The bed is made. She's elsewhere.</p>
<</if>>
<div class="menu-buttons">
[[Living room|LivingRoomSkylar]]
[[Bathroom|BathroomSkylar]]
[[Apartment door|ApartmentSkylar]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/bathroom.jpg" alt="Skylar bathroom">
</div>
<p class="spy-narrative">Compact bathroom, clean enough for a store manager who hates mess. Condensation ghosts linger on the mirror some evenings.</p>
</div>
<<populateLocation "BathroomSkylar">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Quiet. Just the drip of a faucet.</p>
<</if>>
<div class="menu-buttons">
[[Living room|LivingRoomSkylar]]
[[Bedroom|BedroomSkylar]]
[[Apartment door|ApartmentSkylar]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/skylar/balcony/skylar_balcony_front.webp" alt="Skylar balcony">
</div>
<p class="spy-narrative">A narrow balcony over Maple Court. Street noise, warm rail metal, just enough cover from the next unit's plants.</p>
</div>
<<populateLocation "BalconySkylar">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Wind and traffic. No Skylar.</p>
<</if>>
<div class="menu-buttons">
[[Back inside|LivingRoomSkylar]]
[[Apartment door|ApartmentSkylar]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/skylar_apt/pool.jpg" alt="Maple Court pool">
</div>
<p class="spy-narrative">Maple Court complex pool — chain-link, plastic loungers, the smell of chlorine and cut grass. Residents only after dark if you know the code.</p>
</div>
<<populateLocation "PoolComplexSkylar">>
<<if Object.keys($peoplePresent).length is 0>>
<p class="mission-narrative-focus">Empty water. Come back when she's off shift.</p>
<</if>>
<div class="menu-buttons">
[[Back to unit 3B|ApartmentSkylar]]
[[Maple Court lobby|ApartmentsStandard]]
</div>
</div><<set $randomNumber to Math.floor(Math.random() * 5) + 1>> /* 5 vídeos de flirt */
<<silently>>
/* Atualiza interações e stats da Skylar */
<<set $storeSkylar.dailyInteractions.flirt to ($storeSkylar.dailyInteractions.flirt || 0) + 1>>
<<set $storeSkylar.love to ($storeSkylar.love || 0) + ($storeSkylar.interactions.flirt.stats.love || 2)>>
<<set $storeSkylar.corruption to ($storeSkylar.corruption || 0) + ($storeSkylar.interactions.flirt.stats.corruption || 1)>>
/* Adicionando Lust, assumindo que exista na definição, com fallback */
<<set $player.lust to ($player.lust || 0) + ($storeSkylar.interactions.flirt.stats.lust_player || 4)>> /* Flertar pode aumentar o lust do jogador também */
<</silently>>
<div class="game-container">
<<if $storeSkylar.love >= 40 or $storeSkylar.lust >= 35>>
<<set _dialogueOptions to [
{
skylar: "You know... every time you walk through that door, I stop caring about whoever else is in the store.",
player: "(Grinning) Is that so? Guess I'll have to come by even more often."
},
{
skylar: "My shift feels way too long today. Think you could come by my apartment tonight once I'm off?",
player: "Name the time, Skylar. I'll be there."
},
{
skylar: "I still get shivers thinking about what we did last time. You've got me completely hooked, you know that?",
player: "(Leaning in) You're not complaining though, are you?"
},
{
skylar: "Keep looking at me with those eyes and I might just flip the lock on the front door right now.",
player: "(Chuckling) Don't tempt me... the storeroom is right there."
}
]>>
<<else>>
<<set _dialogueOptions to [
{
skylar: "Find everything you were... *looking* for? Sometimes the best things aren't on the shelves.",
player: "(Trying to act cool) Oh yeah? Like what, for instance?"
},
{
skylar: "You know, for someone just visiting, you seem to fit right in. Maybe you should stick around longer?",
player: "Maybe I should... depends on what there is to stick around *for*."
},
{
skylar: "It gets kinda boring here sometimes. A little distraction is always welcome... What kind of 'distractions' are you good at providing?",
player: "I can be pretty... distracting when I want to be."
},
{
skylar: "Those shorts Carol wears... they leave *nothing* to the imagination, huh? Wonder if she knows how much attention she gets.",
player: "She probably has an idea. Hard not to notice."
},
{
skylar: "So, besides helping your aunt, what else does a guy like you do for fun around here? The nights can get long...",
player: "I'm open to suggestions, especially from a local expert."
}
]>>
<</if>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
<<= _randomDialogue.skylar >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/skylar/flirt/skylar_flirt_" + $randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Skylar leans against the counter, a playful or challenging look in her eyes.
</p>
</div>
<br>
<div class="menu-buttons">
[[Leave Interaction->LocalStore]]
</div>
</div>
<<unset _randomDialogue, _videoPath>><<set $randomNumber to Math.floor(Math.random() * 3) + 1>> /* 4 vídeos de talk */
<<silently>>
/* Atualiza interações e stats da Skylar */
<<set $storeSkylar.dailyInteractions.talk to ($storeSkylar.dailyInteractions.talk || 0) + 1>>
<<set $storeSkylar.love to ($storeSkylar.love || 0) + ($storeSkylar.interactions.talk.stats.love || 3)>> /* Usando fallback se stats não definido */
<<set $storeSkylar.corruption to ($storeSkylar.corruption || 0) + ($storeSkylar.interactions.talk.stats.corruption || 0)>> /* Skylar pode não ter lust/corruption em talk */
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
skylar: "Busy day today... people buying the weirdest combinations sometimes. Makes you wonder.",
player: "Yeah? Like what?"
},
{
skylar: "Did you find everything okay? Let me know if you need help reaching anything, some shelves are a bit high.",
player: "Thanks, Skylar. I think I'm good for now."
},
{
skylar: "Heard you're staying with Carol for the weekend. She's... quite the character, isn't she?",
player: "She's great! Always fun to visit."
},
{
skylar: "Just finished restocking the snacks section. Anything catch your eye?",
player: "Maybe later, just looking around for now."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
<<= _randomDialogue.skylar >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/skylar/talk/skylar_talk_" + $randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Skylar continues working while chatting, occasionally glancing your way.
</p>
</div>
<br>
<div class="menu-buttons">
[[Leave Interaction->LocalStore]] /* Volta para a visão geral da loja */
</div>
</div>
<<unset _randomDialogue, _videoPath>><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I’ve arrived at the Local Store. Let’s see what’s going on here.
</div>
</div>
<div class="environment-container">
<p class="environment-text">The Local Store is bustling with activity. Shelves are stocked, and the scent of fresh produce fills the air.</p>
</div>
<<if ($storeSkylar.locationSchedule.LocalStore.start <= $storeSkylar.locationSchedule.LocalStore.end and $time >= $storeSkylar.locationSchedule.LocalStore.start and $time <= $storeSkylar.locationSchedule.LocalStore.end)
or ($storeSkylar.locationSchedule.LocalStore.start > $storeSkylar.locationSchedule.LocalStore.end and ($time >= $storeSkylar.locationSchedule.LocalStore.start or $time <= $storeSkylar.locationSchedule.LocalStore.end))>>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Welcome! Let me know if you need any help.
</div>
</div>
<</if>>
<div class="location-grid">
<div class="location-item">
<div class="location-overlay">
[[Enter Stockroom|LocalStoreStock]]
</div>
<img src="img/layout/store_stock/stock.png" alt="Stockroom Door">
</div>
<div class="location-item">
<div class="location-overlay">
[[Return to Carol's House|CarolHouse]]
</div>
<img src="img/layout/house/house.jpg" alt="Exit to Carol's House">
</div>
</div>
<<if $storeWorkFeedback>>
<div class="mission-task-container" style="margin-top: var(--sp-3);">
<p class="spy-narrative"><<= $storeWorkFeedback>></p>
</div>
<<set $storeWorkFeedback to null>>
<</if>>
<div class="menu-buttons" style="margin-top: var(--sp-6);">
<<link "Browse the Shelves">>
<<set $shopContext to { id: "LocalStore", name: "Local Store", ret: "LocalStore" }>>
<<goto "Shop">>
<</link>>
<<link "Check the Magazine Stand">>
<<set $storeMagazineOpen to true>>
<<goto "LocalStore">>
<</link>>
<<if $keyEvents.openWorldCarolCity>>
<<link "Work a Shift (2h, $32)">>
<<if $time < 9 or $time > 17>>
<<set $storeWorkFeedback to "The store is only hiring extra clerk shifts between 9:00 AM and 5:00 PM.">>
<<elseif $dailyActivities.workLocalStore.count >= $dailyActivities.workLocalStore.limit>>
<<set $storeWorkFeedback to "You've already worked your shift at the store today. Come back tomorrow!">>
<<elseif $player.energy < 15>>
<<set $storeWorkFeedback to "You're too exhausted to handle a shift right now. You need at least 15% energy!">>
<<else>>
<<set $dailyActivities.workLocalStore.count += 1>>
<<set $player.energy to Math.max(0, $player.energy - 15)>>
<<run window.AWAC.earn(32)>>
<<run window.AWAC.advanceTime(2)>>
<<run window.AWAC.applyReward({ charisma_xp: 6 })>>
<<if $storeSkylar.locationSchedule.LocalStore.start <= $time and $time <= $storeSkylar.locationSchedule.LocalStore.end>>
<<set $storeSkylar.love += 2>>
<<set $storeWorkFeedback to "You spent two hours stocking shelves and ringing up customers. Skylar worked the aisle beside you with an approving smile, chatting during slow moments. (+$32, +6 Charisma XP, +2 Skylar Love, -15% Energy, +2 Hours Passed)">>
<<else>>
<<set $storeWorkFeedback to "You spent two hours restocking shelves and handling the register. The shift flew by and you pocketed your honest wages! (+$32, +6 Charisma XP, -15% Energy, +2 Hours Passed)">>
<</if>>
<</if>>
<<goto "LocalStore">>
<</link>>
<</if>>
<<if $keyEvents.openWorldCarolCity and not $keyEvents.skylarAddressKnown and $storeSkylar.love >= 40
and ($storeSkylar.locationSchedule.LocalStore.start <= $time and $time <= $storeSkylar.locationSchedule.LocalStore.end)>>
<<link "Offer to walk Skylar home after her shift">><<goto "SkylarWalkHome">><</link>>
<</if>>
</div>
<<if $storeMagazineOpen>>
<div class="magazine-rack-panel" id="magazine-rack-panel">
<div class="magazine-header">
<h4>📰 The Counter Magazine Rack</h4>
<<link "✕ Close">>
<<set $storeMagazineOpen to false>>
<<goto "LocalStore">>
<</link>>
</div>
<p class="spy-narrative">
While waiting near the register, you flip through the glossy publications on the counter rack. You find a provocative issue featuring <strong>CK Captions</strong>—a collection of photo-caption stories exploring taboo temptations, seductive encounters, and forbidden confessions. Skylar catches you glancing at the cover with an amused smirk.
</p>
<div class="magazine-promo-box">
<span>Curious for more taboo caption stories?</span>
<a href="https://ckcaptions.com" target="_blank" rel="noopener noreferrer" class="external-promo-link">Browse ckcaptions.com ↗</a>
</div>
</div>
<</if>>
<<if State.hasPlayed("LocalStore")>>
<div class="mission-list">
<h3>Available Missions</h3>
<<set _missionCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _mission range $missions>>
<<if _mission.location is "LocalStore" and _mission.status is 0 and _mission.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _mission.period is "string">>
<<if _mission.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_mission.period)>>
<<if _mission.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _mission.period is 'undefined' or _mission.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _mission.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _mission.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_mission.requirements.item)>>
<<elseif _mission.requirements.type is "keyEvent">> <<set _reqMet to $keyEvents[_mission.requirements.id]>>
<<elseif _mission.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _mission.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _missionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<link _mission.name _mission.passage>>
<span class="mission_name"><<print _mission.name>></span>
<</link>>
<<set _missionCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _missionCount is 0>>
<p>There are no missions available.</p>
<</if>>
</div>
<div class="scene-list">
<h3>Available Scenes</h3>
<<set _sceneCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _scene range $scenes>>
<<if _scene.location is "LocalStore" and _scene.status is 0 and _scene.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _scene.period is "string">>
<<if _scene.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_scene.period)>>
<<if _scene.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _scene.period is 'undefined' or _scene.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _scene.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _scene.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_scene.requirements.item)>>
<<elseif _scene.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _scene.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _sceneCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _sceneName to _scene.name || (_id.charAt(0).toUpperCase() + _id.slice(1)).replace(/([a-z])([A-Z])/g, '$1 $2')>>
<<link _sceneName _scene.passage>>
<span class="scene_name"><<print _sceneName>></span>
<</link>>
<<set _sceneCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _sceneCount is 0>>
<p>There are no scenes available.</p>
<</if>>
</div>
<div class="interaction-list">
<h3>Available Interactions</h3>
<<set _interactionCount to 0>>
<<for _type, _interaction range $storeSkylar.interactions>>
<<if ($storeSkylar.locationSchedule.LocalStore.start <= $storeSkylar.locationSchedule.LocalStore.end and $time >= $storeSkylar.locationSchedule.LocalStore.start and $time <= $storeSkylar.locationSchedule.LocalStore.end)
or ($storeSkylar.locationSchedule.LocalStore.start > $storeSkylar.locationSchedule.LocalStore.end and ($time >= $storeSkylar.locationSchedule.LocalStore.start or $time <= $storeSkylar.locationSchedule.LocalStore.end))>>
<<if _interaction.limit > ($storeSkylar.dailyInteractions[_type] or 0)>>
<<if _interactionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _capitalized = _type.charAt(0).toUpperCase() + _type.slice(1)>>
<<link _capitalized _interaction.passage>>
<span class="interaction_name"><<print _capitalized>></span>
<</link>>
<<set _interactionCount += 1>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _interactionCount is 0>>
<p>There are no interactions available for now.</p>
<</if>>
</div>
<<else>>
<p>Welcome to the Local Store. Seems like Skylar is working today.</p>
<<set State.track("LocalStore")>>
<</if>>
<div class="menu-buttons">
[[Leave the Store->CarolHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Okay, I'm in the stockroom. It's a bit cramped and dusty back here.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store_stock/stock.png" alt="Local Store Stockroom">
</div>
<p class="environment-text">The stockroom is filled with shelves packed high with boxes, supplies, and various unsold items. The air is a little musty.</p>
</div>
<!-- Skylar não está aqui por padrão, então não há diálogo de saudação dela -->
<!-- Se uma missão/cena específica trouxer Skylar aqui, o diálogo seria parte dessa missão/cena -->
<!-- O location-grid aqui será apenas para sair -->
<div class="location-grid">
<div class="location-item">
<div class="location-overlay">
[[Return to Main Store|LocalStore]]
</div>
<img src="img/layout/store/store_inside_small.jpg" alt="Exit to Main Store"> <!-- Imagem da loja principal -->
</div>
</div>
<<if State.hasPlayed("LocalStoreStock")>>
<div class="mission-list">
<h3>Available Missions</h3>
<<set _missionCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _mission range $missions>>
<<if _mission.location is "LocalStoreStock" and _mission.status is 0 and _mission.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _mission.period is "string">>
<<if _mission.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_mission.period)>>
<<if _mission.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _mission.period is 'undefined' or _mission.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _mission.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _mission.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_mission.requirements.id)>>
<<elseif _mission.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_mission.requirements.item)>>
<<elseif _mission.requirements.type is "keyEvent">> <<set _reqMet to $keyEvents[_mission.requirements.id]>>
<<elseif _mission.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _mission.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _missionCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<link _mission.name _mission.passage>>
<span class="mission_name"><<print _mission.name>></span>
<</link>>
<<set _missionCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _missionCount is 0>>
<p>There are no missions available here for now.</p>
<</if>>
</div>
<div class="scene-list">
<h3>Available Scenes</h3>
<<set _sceneCount to 0>>
<<silently>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<</silently>>
<<for _id, _scene range $scenes>>
<<if _scene.location is "LocalStoreStock" and _scene.status is 0 and _scene.day.includes($actualDay)>>
<<set _periodMatch to false>>
<<if typeof _scene.period is "string">>
<<if _scene.period is _currentPeriodName>> <<set _periodMatch to true>> <</if>>
<<elseif Array.isArray(_scene.period)>>
<<if _scene.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif typeof _scene.period is 'undefined' or _scene.period is null>>
<<set _periodMatch to true>>
<</if>>
<<if _periodMatch>>
<<set _reqMet to false>>
<<if _scene.requirements.type is "none">> <<set _reqMet to true>>
<<elseif _scene.requirements.type is "mission">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "scene">> <<set _reqMet to State.hasPlayed(_scene.requirements.id)>>
<<elseif _scene.requirements.type is "item">> <<set _reqMet to $player.inventory.includes(_scene.requirements.item)>>
<<elseif _scene.requirements.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _scene.requirements>>
<<if _stat is not "type" and $player[_stat] < _value>> <<set _reqMet to false>> <</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<if _sceneCount < 3>> <<set _display to true>> <<else>> <<set _display to false>> <</if>>
<<if _display>>
<<set _sceneName to _scene.name || (_id.charAt(0).toUpperCase() + _id.slice(1)).replace(/([a-z])([A-Z])/g, '$1 $2')>>
<<link _sceneName _scene.passage>>
<span class="scene_name"><<print _sceneName>></span>
<</link>>
<<set _sceneCount += 1>>
<</if>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _sceneCount is 0>>
<p>There are no scenes available here for now.</p>
<</if>>
</div>
<!-- Interações com Skylar normalmente não ocorreriam aqui, a menos que seja parte de uma cena/missão específica -->
<!-- Se você quiser interações genéricas com Skylar *se* ela estiver no estoque por algum motivo, -->
<!-- você precisaria adicionar uma verificação de $storeSkylar.locationSchedule.LocalStoreStock -->
<!-- e copiar a lógica da interaction-list da passagem LocalStore, adaptando o location check. -->
<!-- Por agora, vou omitir para manter simples, já que você disse que não haveria fala dela aqui. -->
<div class="interaction-list">
<h3>Available Interactions</h3>
<p>No one to interact with back here right now.</p>
</div>
<<else>>
<p>The stockroom is quiet. You wonder if there's anything specific to do back here.</p>
<<set State.track("LocalStoreStock")>>
<</if>>
<!-- Menu de Saída da Passagem -->
<div class="menu-buttons">
[[Leave Stockroom->LocalStore]]
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Fix Skylar's Register
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Local Store Interior">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You walk into the store and immediately hear Skylar's frustrated voice from behind the counter. She's aggressively pressing buttons on the cash register, which seems to be completely unresponsive.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Perfect. Just perfect. This stupid register is completely broken and I can't process any sales. Since you're here, you can fix it. I don't have time to deal with this technical nonsense.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Uh, I'm not really a tech expert, but I can take a look. What exactly is wrong with it?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
*sighs dramatically* Everything is wrong with it. It won't turn on properly, the screen is messed up, buttons don't work, and the printer is jammed. Just... figure it out. I'll be doing actual manager work while you handle this basic stuff.
</div>
</div>
<p class="spy-narrative">
Skylar walks away dismissively, leaving you alone with the problematic register. You can see multiple issues that need to be addressed. Time to troubleshoot and fix each problem systematically.
</p>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="register-fixing-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Move Heavy Boxes for Skylar
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Inside Local Store">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You enter the store and notice a note on the counter: "Back in 10 minutes - Please help move the boxes in the back to the storage room if you have time. Thanks! - Skylar". You look toward the back of the store and see several boxes scattered around that clearly need to be moved to the storage area.
</p>
</div>
<p class="spy-narrative">
The boxes are of different sizes and types - some look light, others heavy, and a few appear fragile. You'll need to be strategic about how many you carry at once. Carry too many and you might drop them all!
</p>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="box-moving-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Refuse Skylar's Unreasonable Delivery
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Local Store Interior">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You enter the store to find Skylar behind the counter with a large package and what looks like a complicated delivery form. She looks up with her usual expression of mild annoyance, as if your mere presence is inconvenient.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Oh good, you're here. I need you to make a delivery for me. It's to some address way out in Riverside Heights - like, an hour and a half drive each way. The customer is expecting it today and I obviously can't leave the store.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Riverside Heights? That's really far away... and I don't even know that area. Plus, gas money for a three-hour round trip would be expensive.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
*rolls eyes* So? Use GPS like everyone else. And gas money? Really? It's called helping out. I've been giving you little jobs around here, so now you can actually do something useful for once. The address is on this paper.
</div>
</div>
<p class="spy-narrative">
She slides a crumpled piece of paper across the counter with an address scrawled in barely legible handwriting. The package is large and looks heavy. You realize she's expecting you to drive hours out of your way, use your own gas money, and navigate to an unknown area - all without any compensation or even a "please."
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Look, Skylar, I've been happy to help around the store with organizing and fixing things, but this is different. That's a really long drive to a place I don't know, and you're not even offering to cover gas or anything.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Excuse me? Are you seriously telling me no right now? After everything I've let you do around here? This is part of helping out - you don't get to pick and choose what's convenient for you.
</div>
</div>
<!-- The moment of refusal -->
<div class="game-choice" style="margin-top: 20px; background: rgba(220, 53, 69, 0.1); border: 2px solid rgba(220, 53, 69, 0.3); border-radius: 8px; padding: 20px;">
<h3 style="color: #dc3545; text-align: center; margin-bottom: 15px;">Time to Stand Your Ground</h3>
<p style="color: #dadada; text-align: center; margin-bottom: 20px;">Skylar is clearly taking advantage of your willingness to help. This "delivery" would cost you hours of time and your own money, with no appreciation. How do you respond?</p>
<div class="answer-options" id="refusal-response">
<<button "I'm sorry, but I can't do this delivery. It's too far and unreasonable.">>
<<replace "#refusal-response">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I'm sorry, but I can't do this delivery. It's too far, I don't know the area, and you're asking me to spend my own money on gas for your business. That's not reasonable.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Wow. Just... wow. I can't believe you're being this selfish right now. Fine. FINE. I guess I'll have to figure something else out since you can't be bothered to actually help when it matters.
</div>
</div>
<p class="spy-narrative" style="color: #28a745; font-weight: bold; margin-top: 15px;">
You stand firm in your decision. While Skylar is clearly angry, you feel good about not letting yourself be taken advantage of. Some boundaries are important to maintain.
</p>
<<set $missions["021"].status to 1>>
<<set $storeSkylar.love to $storeSkylar.love - 5>>
<<set $player.confidence to ($player.confidence || 0) + 10>>
<div class="menu-buttons" style="margin-top: 20px; text-align: center;">
[[Continue->SkylarStressForcedBJ]]
</div>
<</replace>>
<</button>>
<<button "No way. You've been using me for free labor and now this? Absolutely not.">>
<<replace "#refusal-response">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
No way. You've been having me do all this work around here for practically nothing, and now you want me to drive three hours and pay for my own gas? Absolutely not. Find someone else.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Are you kidding me right now?! I gave you opportunities to help out and gain experience, and THIS is how you repay me? You're being completely ungrateful and selfish. Don't expect any more favors from me.
</div>
</div>
<p class="spy-narrative" style="color: #ffc107; font-weight: bold; margin-top: 15px;">
You call out her behavior directly. Skylar is furious, but you feel empowered standing up for yourself against someone who was clearly taking advantage of your good nature.
</p>
<<set $missions["021"].status to 1>>
<<set $storeSkylar.love to $storeSkylar.love - 8>>
<<set $player.confidence to ($player.confidence || 0) + 15>>
<div class="menu-buttons" style="margin-top: 20px; text-align: center;">
[[Continue->SkylarStressForcedBJ]]
</div>
<</replace>>
<</button>>
<<button "I'll think about it...">>
<<replace "#refusal-response">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I... I'll think about it and let you know. That's a big ask and I need to consider it.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Think about it? There's nothing to think about! Either you help or you don't. I need an answer now, not later. You know what? Never mind. I can see where your priorities are.
</div>
</div>
<p class="spy-narrative" style="color: #6c757d; margin-top: 15px;">
Your hesitation was essentially a refusal anyway. Skylar storms off, clearly frustrated. While you avoided direct confrontation, you still didn't let yourself be pushed into an unreasonable situation.
</p>
<<set $missions["021"].status to 1>>
<<set $storeSkylar.love to $storeSkylar.love - 3>>
<<set $player.confidence to ($player.confidence || 0) + 5>>
<div class="menu-buttons" style="margin-top: 20px; text-align: center;">
[[Continue->SkylarStressForcedBJ]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Organize Skylar's Stockroom
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="Store Stockroom">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
You find Skylar in the back stockroom, surrounded by completely disorganized inventory. She's looking at her phone while pointing vaguely at the mess of items scattered around on shelves and tables.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
Oh, there you are. Look, I need this stockroom organized and I'm way too busy with... important manager stuff. Just sort everything into the right categories - electronics, clothing, food, office supplies. Pretty basic, even you should be able to handle it.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Sure, I can help organize things. How do you want me to categorize everything?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">
*rolls eyes* Seriously? Electronics with electronics, clothes with clothes... it's not complicated. Just use some common sense. I'll be doing actually important work while you handle this menial stuff. Try not to mess it up.
</div>
</div>
<p class="spy-narrative">
Skylar goes back to her phone, clearly considering this conversation over. The stockroom is indeed a mess - items are scattered everywhere with no apparent organization system. Time to get to work while she... manages.
</p>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="stock-organizing-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem do interior da loja, Skylar no balcão -->
<img src="img/layout/store/store_inside_skylar.jpg" alt="Inside Local Store with Skylar">
</div>
<p class="spy-narrative">
You arrive at the Local Store. Skylar is behind the counter, organizing some items with surprising efficiency. She looks up and gives you a quick, professional smile.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Hi Skylar. I'm here to pick up a package for Carol? My aunt? She said you'd have it.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Imagem de Skylar, talvez um pouco curiosa ou neutra -->
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Neutral Face">
</div>
<div class="dialog-text skylar">
Oh, right, Carol's nephew! Yes, she called ahead. Hang on... She pulls out a discreetly wrapped, medium-sized box from under the counter. Hmm, Carol's been ordering quite a few... *interesting* things lately. This one feels a bit delicate.
</div>
</div>
<!-- Mini-Interação / Desafio com Skylar -->
<div class="game-choice" style="margin-top: 20px;">
<h3>Skylar's Comment</h3>
<p>"You must be taking good care of your aunt if she's treating herself like this," Skylar adds with a faint smirk. How do you respond?</p>
<div class="scene-options answer-options" id="skylar-response-options">
<<link "Just helping out where I can.">>
<<replace "#skylar-response-options">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">Alright then. Here you go.</div>
</div>
<p class="spy-narrative">She nods and slides the box across the counter. No extra commentary.</p>
<<set $missions["007.2"].status to 1>>
<<run $player.inventory.push("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->DeliverPackage]]
</div>
<</replace>>
<</link>>
<<link "Uh, yeah, she deserves it.">>
<<replace "#skylar-response-options">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">Sure she does. Here's the package.</div>
</div>
<p class="spy-narrative">She raises an eyebrow, a flicker of amusement, and hands you the box.</p>
<<set $missions["007.2"].status to 1>>
<<run $player.inventory.push("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->DeliverPackage]]
</div>
<</replace>>
<</link>>
<<link "Trying my best. She keeps me on my toes.">>
<<if $player.charisma >= 7>>
<<replace "#skylar-response-options">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">I bet she does. Well, enjoy... whatever is in here.</div>
</div>
<p class="spy-narrative">She lets out a small laugh and winks as she hands over the box.</p>
<<set $missions["007.2"].status to 1>>
<<run $player.inventory.push("CarolPackage")>>
<<set $storeSkylar.love to ($storeSkylar.love || 0) + 3>>
<<set $time to $time + 1>>
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->DeliverPackage]]
</div>
<</replace>>
<<else>>
<<replace "#skylar-response-options">>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face">
</div>
<div class="dialog-text skylar">Right. Here's the package.</div>
</div>
<p class="spy-narrative">You try to sound smooth. She gives a polite, unconvinced smile and slides the box over.</p>
<<set $missions["007.2"].status to 1>>
<<run $player.inventory.push("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->DeliverPackage]]
</div>
<</replace>>
<</if>>
<</link>>
</div>
</div>
</div>
/* SKYLAR PHASE 2 MISSIONS START */<<set $keyEvents.skylarAddressKnown to true>>
<<set $keyEvents.skylarHomeWelcome to true>>
<div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Keys & Boundaries</p>
<p class="mission-narrative-focus">Unit 3B. She sets a ceramic bowl on the counter — spare key, house rules, no surprises. First real welcome, not a store shift.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">If you're coming up, you play by my rules. Key goes in the bowl. You read the cards. No creeping my bathroom at midnight.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Bowl. Cards. Boundaries. I can do that.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm005-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Closing Checklist</p>
<p class="mission-narrative-focus">Local Store near close. She's still stiff from the till fight — but she left you a checklist instead of another delivery. Soft path back into her good books.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Don't talk. Just... help me shut down clean. Lights, blinds, register, lock. In that order. Please.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Checklist it is. I'm not here to make it worse.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm006-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Stock Ghost</p>
<p class="mission-narrative-focus">Back room inventory ghosts — SKUs that exist on paper and nowhere on shelves. Find the hotspots before the auditor does.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Three ghosts. If you find them, I don't have to invent a story. If you don't, I invent a story about you.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Point me at the shelves. I'll hunt.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm007-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: After the Till</p>
<p class="mission-narrative-focus">Register counted. Lights half-off. She jingles the keys and glances at the lot — protocol before anything else happens out there.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">If we step outside, you follow the rules. No loud, no rush, no treating me like the counter fight. Clear?</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Clear. Your pace.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm008-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Pool Gate Code</p>
<p class="mission-narrative-focus">Maple Court pool gate. She won't share the amenity code until you prove you can remember it under pressure — emoji sequence, no notes.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Residents only. Memorize the sequence. If you mess up, the panel locks and I look like an idiot.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Show me once. I'll hold it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm009-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Stay Late</p>
<p class="mission-narrative-focus">Living room, low lights. She's offering more than tea — but only if every consent beat lands soft and clear.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">You can stay. Or you can go. If you stay, I talk you through what I want. No guessing games.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'm listening. Lead.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm010-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Spot Me Once</p>
<p class="mission-narrative-focus">Gym floor. Off-shift Skylar wants a spotter who balances form praise with heat — dual meters, no pure creep.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Don't drop me. Don't stare like a customer. Spot me like you mean it — then maybe we talk about... after.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Hands ready. Eyes on the bar path.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm011-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Late Fee Talk</p>
<p class="mission-narrative-focus">Behind the counter after a rush. She's testing how far rough talk can go without breaking the trust you rebuilt.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Customers don't get to talk to me like that. You... maybe. Dial it. Show me you know the line.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll find the line. Tell me when I cross it.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm012-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Out of Town</p>
<p class="mission-narrative-focus">Weekend bag on the floor. She wants a packing sequence done right before the spa drive — no half-zipped chaos.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Suit, robe, chargers, book I won't read. In order. If the bag's a mess, the trip's a mess.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Sequence mode. Hand me the first item.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm013-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Robe Evening</p>
<p class="mission-narrative-focus">Bedroom doorway. Kimono, bare honesty. She wants dials set to truth — not empty flattery, not cruelty.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">This is me off the clock. Tell me what you see without being a creep or a coward.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Honest. Soft. Still here.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm014-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Mirror Check</p>
<p class="mission-narrative-focus">Bathroom mirror selfie board. She trusts you with the frame — pin the right compliments, bin the rest.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">If this photo leaves the house, I want the words under it to be mine. Help me pick them.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Pin what belongs. Trash what doesn't.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm015-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Steam & Trust</p>
<p class="mission-narrative-focus">Shower stills ladder. Match tools to steam stages — towel, wipe, door crack, stay. Earn the private show.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Door stays cracked if you pass. Slam one wrong tool and I'm locking it.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll match the stage. No rushing.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm016-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Couch Rules</p>
<p class="mission-narrative-focus">Sofa spread. Rules first — then fingers, if she still wants the heat after you pass her quiz.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Couch has rules. Break one and you sit in the chair. Pass, and... closer.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Rules first. Closer after.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm017-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Pool Evening</p>
<p class="mission-narrative-focus">Complex pool after dark. Still ladder — sheer top, edge, standing heat — before the pantyhose night goes live.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Quiet. No splash fights. Match the moment or we leave dry.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Quiet. Matching you.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm018-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Golden Hour</p>
<p class="mission-narrative-focus">Balcony at golden hour. Exhibition stages — front, back, hold the pose while the street noise hums below.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">If someone looks up, we freeze. If they don't... we keep going. Your call on the stages.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll read the street with you.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm019-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Pearls Night</p>
<p class="mission-narrative-focus">Bedroom glamour. Pearls, stockings, staged turns — she wants the night to feel expensive, not rushed.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face"></div>
<div class="dialog-text skylar">Slow. Like we're not on a store clock. Say what looks right.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Slow. Expensive. Yours.</div>
</div>
<div class="game-challenge kpizza-challenge">
<div id="sm020-content"></div>
</div>
</div>
/* SKYLAR PHASE 2 MISSIONS END */<<approachCharacter "storeSkylar">><<silently>>
<<set _approach to [
"The stockroom door is cracked again. You glance both ways down the aisle.",
"She's in the back. The door's not closed all the way. You step closer.",
"You hear the rustle of fabric from the back. The aisle is empty. The door is open."
].random()>>
<<set _during to [
"Through the gap — same shirt coming off, same pause as she catches her own reflection. Habit, you realize.",
"Her bra strap snaps back into place. She doesn't notice you. She's humming.",
"She steps out of her work pants without flair. Shop-girl in her own world. You're not supposed to be here."
].random()>>
<<set _outcome to [
"You back away before she turns. The door catches a little on your sleeve. You freeze. She doesn't look up.",
"You hear her sigh — a tired sound — and decide that's enough. You leave the aisle without looking back.",
"She looks up at the wrong moment. Eye contact for one full second. Neither of you says anything. You walk away fast."
].random()>>
<<set _video to $scenes["SkylarChangingRoomSpy"].replay.videos.random()>>
<<applyReplay "SkylarChangingRoomSpy">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_small.jpg" alt="Local Store">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Walk out of the store->LocalStore]]
</div>
</div><<silently>>
<<set _approach to [
"You catch her behind the counter restocking. \"Now,\" you say. She doesn't ask what.",
"She's alone at the register. You lock the door. \"Closed for fifteen,\" you say.",
"She looks up from her clipboard. You don't have to say anything. Her shirt's already coming off."
].random()>>
<<set _during to [
"She's resigned, but her eyes give her away. She wants this more than she'd ever admit.",
"Her glasses fog up. She doesn't take them off. You don't either.",
"She hates that she likes it. You can see her trying not to make sound."
].random()>>
<<set _outcome to [
"She wipes her face on her work apron. \"Get out. I have to count the till.\"",
"She straightens her hair like nothing happened. \"Same time tomorrow,\" she says. Not a question.",
"She looks at you for a long beat. \"You know what you are,\" she says. Then turns back to her clipboard."
].random()>>
<<set _video to $scenes["SkylarForcedBlowjob"].replay.videos.random()>>
<<applyReplay "SkylarForcedBlowjob">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_small.jpg" alt="Local Store">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Unlock the door->LocalStore]]
</div>
</div>
/* SKYLAR PHASE 2 REPLAYS START */<<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS005"].replay.videos.random()>>
<<applyReplay "SS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="steam">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave the bathroom->BathroomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS006"].replay.videos.random()>>
<<applyReplay "SS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="couch">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay on the couch->LivingRoomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS007"].replay.videos.random()>>
<<applyReplay "SS007">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="spank">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sit carefully->LivingRoomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS009"].replay.videos.random()>>
<<applyReplay "SS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="lesson">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay for the lecture notes->LivingRoomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS010"].replay.videos.random()>>
<<applyReplay "SS010">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/store/store_inside_skylar.jpg" alt="lot">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave the lot->LocalStore]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS011"].replay.videos.random()>>
<<applyReplay "SS011">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="bed">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Stay the night->BedroomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS012"].replay.videos.random()>>
<<applyReplay "SS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/pool/pool_sunny_small.jpg" alt="pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->PoolComplexSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS013"].replay.videos.random()>>
<<applyReplay "SS013">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="rough">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Fetch water->BedroomSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS014"].replay.videos.random()>>
<<applyReplay "SS014">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/apartments_standard.jpg" alt="spa">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Dry off->ApartmentSkylar]]
</div>
</div><<silently>>
<<set _approach to [
"She gives you that store-manager look that means yes without saying yes.",
"The mood is already there — you only have to step closer.",
"She tips her chin. Same heat. Different hour."
].random()>>
<<set _during to [
"It is familiar and still a little dangerous — the way she likes it.",
"She keeps control of the pace even when she pretends she does not.",
"Breath, fabric, that quiet store-girl curse under her breath."
].random()>>
<<set _outcome to [
"She fixes her hair like inventory. 'Same rules next time.'",
"'Don't make it weird at work,' she says, not quite smiling.",
"She points at the door, soft. 'I open at nine.'"
].random()>>
<<set _video to $scenes["SS017"].replay.videos.random()>>
<<applyReplay "SS017">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="lingerie">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Hang the set->BedroomSkylar]]
</div>
</div>
/* SKYLAR PHASE 2 REPLAYS END */<div class="game-container spy-scene-container"> <!-- Reutilizando a classe base para o container da cena -->
<!-- PARTE 1: A DESCOBERTA DA FRESTA -->
<div class="environment-container">
<p class="spy-narrative" style="margin-top: 15px; font-size: 1.1em;">
It's a relatively quiet afternoon at the Local Store. You're browsing the aisles, perhaps looking for a snack or just killing time after picking up Carol's package. As you pass by a door slightly ajar near the back – probably a stockroom or a small office – you hear faint rustling sounds from within.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Curious)">
</div>
<div class="dialog-text player">
(Thinking) Hmm, what's going on in there? Skylar's probably just organizing something... but that door isn't usually open like this. Maybe I can just... take a quick peek? No harm in that, right?
</div>
</div>
<p class="spy-narrative">
Your less noble instincts take over. You glance around to make sure no other customers are nearby, then cautiously approach the door, pressing your eye to the narrow gap. Your breath hitches.
</p>
<hr style="border-color: rgba(200, 180, 220, 0.2); margin: 25px 0;">
<!-- PARTE 2: A ESPIONAGEM -->
<p class="spy-narrative">
It's Skylar. The small room seems to be a makeshift break area or changing room. Her back is mostly to you, but you can see she's in the process of changing out of her work attire.
</p>
<!-- VÍDEO DA SKYLAR SE TROCANDO -->
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 480px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/skylar/spy/sweetie_remove_clothe.webm" type="video/webm">
<!-- Adicione .webm se tiver -->
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
The video shows her casually peeling off her work shirt, revealing a simple bra underneath, then perhaps unbuttoning her pants or skirt. You get glimpses of her smooth skin, the curve of her waist, the swell of her breasts constrained by the bra. She seems completely at ease, unaware she's being watched, humming softly to herself as she changes. It's a surprisingly intimate, unguarded moment.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Aroused/Guilty)">
</div>
<div class="dialog-text player">
(Thinking) Okay, definitely shouldn't be seeing this. This is... private. But damn, she has a nice body... I need to get out of here before she turns around or someone else comes.
</div>
</div>
<p class="spy-narrative">
Your heart is thumping. You've seen more than you should have. Knowing Skylar's usually no-nonsense demeanor, getting caught would be disastrous, or at the very least, incredibly awkward. With one last lingering look, you carefully pull away from the door, hoping you didn't make any sound.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Slip away unnoticed (you hope)...">>
<<set $scenes["SkylarChangingRoomSpy"].status to 1>>
<<set $storeSkylar.lust += 15>> /* O "lust" aqui é mais uma representação do "potencial" ou da "atração" que o jogador sente/desperta, mesmo que ela não saiba */
<<set $player.corruption += 7>>
/* <<set $time += 0>> // Espiar rapidamente não precisa necessariamente gastar 1h */
<<goto "SkylarLastDeliveryRefusal">> /* Retorna para a visão base da Loja */
<</link>>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 0: A EXPLOSÃO E A EXIGÊNCIA ===== -->
<div class="changing-scene-stage" id="bj-stage-0">
<div class="environment-container">
<p class="spy-narrative" style="margin-top: 15px; font-size: 1.1em;">
The Local Store is quiet again. After refusing yet another delivery request from Skylar, your frustration finally boils over. You've spent a good chunk of the afternoon helping her out, and this "one last thing" feels like a step too far.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Angry)">
</div>
<div class="dialog-text player">
You know what, Skylar? Enough! I've been running around for you all damn day! I thought maybe we could... I don't know, do something else, but all you do is treat me like some goddamn errand boy! You're going to pay for wasting my time. Now.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar Face (Surprised/Scared)">
</div>
<div class="dialog-text skylar">
(Stammering, eyes wide) P-Pay? What are you talking about? I... I was just busy...
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Demanding)">
</div>
<div class="dialog-text player">
No more excuses. Take your top off. And get on your knees. Now.
</div>
</div>
<p class="spy-narrative">
Skylar stares at you, a mixture of fear and something else... a flicker of reluctant curiosity? ...or perhaps just resignation. After a tense moment, she slowly, hesitantly, unbuttons her work shirt, letting it fall to the floor. Then, she unclasps her bra, her surprisingly full breasts spilling free. Her nipples are already hard. With a shaky breath, she sinks to her knees before you.
</p>
<!-- VÍDEO 1: INÍCIO DO BLOWJOB CONSENSUAL (APÓS OS PEITOS PARA FORA) -->
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 520px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/skylar/blowjob/sweetie_forced_bj_1.webm" type="video/mp4">
<!-- Adicione .webm se tiver -->
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
The video starts with her already topless, looking up at you with a mix of apprehension and dawning arousal. You guide your hardened cock towards her mouth. She takes you in, her lips surprisingly soft, and begins to work on you with a slow, almost hesitant rhythm, her eyes never leaving yours.
</p>
<div class="menu-buttons" style="margin-top: 20px;">
<<link "Let her continue at her own pace... for now...">>
<<goto "SkylarStressForcedBJ_Stage1">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 1: JOGADOR CONTROLA O RITMO ===== -->
<div class="changing-scene-stage" id="bj-stage-1">
<p class="spy-narrative">
Her initial hesitation seems to fade, replaced by a growing eagerness. But her pace is still too gentle for your liking. You've had enough of being patient.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Impatient/Dominant)">
</div>
<div class="dialog-text player">
(Gruffly) Faster, Skylar. And deeper.
</div>
</div>
<!-- VÍDEO 2: RITMO ACELERADO, BABA, GARGANTA -->
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 520px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/skylar/blowjob/sweetie_forced_bj_2.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
She whimpers slightly but obeys, her mouth working furiously on your shaft. The video captures the intensity: your hand now on the back of her head, controlling the pace, fucking her throat. Saliva dribbles from the corners of her lips, cascading down her chin and onto her bare breasts, glistening in the dim light of the stockroom. The wet, gagging sounds are almost as arousing as the sight.
</p>
<div class="menu-buttons">
<<link "Push her to her limits...">>
<<goto "SkylarStressForcedBJ_Stage2">>
<</link>>
</div>
</div>
</div><div class="game-container spy-scene-container">
<!-- ===== ESTÁGIO 2: BLOWJOB INTENSO E CUMSHOT FACIAL ===== -->
<div class="changing-scene-stage" id="bj-stage-2">
<p class="spy-narrative">
You can feel your climax building rapidly. She's panting, tears welling in her eyes from the intensity, but she doesn't stop, her dedication almost desperate.
</p>
<!-- VÍDEO 3: BLOWJOB SENTADA/EM PÉ, CUM FACIAL -->
<div class="changing-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 520px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/skylar/blowjob/sweetie_forced_bj_3.webm" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
The video shows the final, frantic moments. She's on you, then you might pull her up or change position. The build-up is palpable. Just as you're about to erupt, you pull out, aiming directly at her face. A thick, copious load sprays across her cheeks, her nose, her lips, even splattering her glasses. Her tongue darts out reflexively, catching some of the hot fluid as it drips. She looks up at you, covered in your cum, a dazed, almost worshipful expression in her eyes.
</p>
<div class="dialog-container" style="margin-top: 20px;">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Satisfied/Dominant)">
</div>
<div class="dialog-text player">
Learned your lesson, Skylar? Next time, think twice before trying to use me.
</div>
</div>
<p class="spy-narrative">
She can only nod, still breathless, a small, satisfied smile playing on her cum-smeared lips. You zip up your pants and walk out, leaving her to clean herself up, a newfound sense of power coursing through you. She definitely enjoyed that "payment" far more than she let on.
</p>
<div class="menu-buttons" style="margin-top: 30px;">
<<link "Leave the store with a smirk...">>
<<set $scenes["SkylarForcedBlowjob"].status to 1>>
<<set $storeSkylar.lust += 30>>
<<set $storeSkylar.love += -5 >> <!-- O "-10" do teu JSON original, mas talvez um -5 seja mais "ela gostou secretamente" -->
<<set $storeSkylar.corruption += 25>>
<<set $player.domination += 10>>
<<set $player.lust += 25>>
<<set $player.energy -= 10>>
/* <<set $time += 1>> */
<<goto "PackBagsToGo">>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/apartments_standard.jpg" alt="Walking Skylar home">
</div>
<p class="spy-narrative">Skylar locks up the store and you fall into step beside her. The walk is easy — she talks about her regulars, her landlord, the book she can't finish. A few blocks later you stop outside a tidy mid-rise.</p>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/skylar/face/skylar_face.jpg" alt="Skylar"></div>
<div class="dialog-text skylar">
This is me. Maple Court, unit 3B. <<if $storeSkylar.love >= 40>>...You're alright, you know that? If you're ever around in the evening, buzz up. I mean it.<</if>>
</div>
</div>
<<silently>>
<<set $keyEvents.skylarAddressKnown to true>>
<<set $storeSkylar.love += 5>>
<</silently>>
<p class="spy-narrative">(You've learned Skylar's address. You can visit her at Maple Court Apartments — unit 3B — when she's home in the evenings.)</p>
<div class="menu-buttons">
[[Visit Maple Court later|ApartmentsStandard]]
[[Head back|CarolHouse]]
</div>
</div>
/* SKYLAR PHASE 2 SCENES START */<div class="game-container spy-scene-container">
<div id="ss005-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss006-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss007-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss009-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss010-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss011-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss012-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss013-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss014-content"></div>
</div><div class="game-container spy-scene-container">
<div id="ss017-content"></div>
</div>
/* SKYLAR PHASE 2 SCENES END */<<silently>>
<<set $locationStaff.harper.dailyInteractions.talk += 1>>
<<set $locationStaff.harper.love += 1>>
<</silently>>
<div class="game-container">
<<set _clips to ["img/chars/harper/venessa_talk.mp4", "img/chars/harper/venessa_talk_2.mp4"]>>
<<set _clip to _clips.random()>>
<<set _opts to [
{ h: "Iced or hot. Don't make me guess your whole personality.", p: "Surprise me." },
{ h: "Clouds are fake. Syrup's real. What do you want?", p: "Whatever you drink." }
]>>
<<set _d to _opts.random()>>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline><source @src="_clip" type="video/mp4"></video>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.harper.face" alt="Harper"></div>
<div class="dialog-text harper"><<= _d.h>></div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player"><<= _d.p>></div>
</div>
<p class="spy-narrative">She is already moving before you finish the sentence. The drink will arrive. The stare might last longer.</p>
<div class="menu-buttons">
<<link "Step away">><<goto "CoffeeShop">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.harper.dailyInteractions.flirt += 1>>
<<set $locationStaff.harper.lust += 2>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline><source src="img/chars/harper/venessa_flirt.mp4" type="video/mp4"></video>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.harper.face" alt="Harper"></div>
<div class="dialog-text harper">You can look. The espresso still costs money.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Then I'll buy another.</div>
</div>
<p class="spy-narrative">She does not look away. The machine hisses. You are not getting her number with a latte.</p>
<div class="menu-buttons">
<<link "Step away">><<goto "CoffeeShop">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.elise.dailyInteractions.talk += 1>>
<<set $locationStaff.elise.love += 1>>
<</silently>>
<div class="game-container">
<p class="spy-narrative">She is not in librarian-mode for this. After hours, or pretending the desk does not exist. The glasses from the portrait are gone.</p>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline><source src="img/chars/elise/mia_talk_1.mp4" type="video/mp4"></video>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.elise.face" alt="Elise"></div>
<div class="dialog-text elise">Don't tell anyone I talk like this. At the desk I'm someone else.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Your secret's safe. The quiet room too.</div>
</div>
<div class="menu-buttons">
<<link "Back to the stacks">><<goto "Library">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.elise.dailyInteractions.flirt += 1>>
<<set $locationStaff.elise.lust += 2>>
<</silently>>
<div class="game-container">
<<set _clips to ["img/chars/elise/mia_flirt_1.mp4", "img/chars/elise/mia_flirt_2.mp4"]>>
<<set _clip to _clips.random()>>
<p class="spy-narrative">This is not the library. She knows it. She sends it anyway.</p>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline><source @src="_clip" type="video/mp4"></video>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.elise.face" alt="Elise"></div>
<div class="dialog-text elise">If you only know me from the desk, you don't know me.</div>
</div>
<div class="menu-buttons">
<<link "Back to the stacks">><<goto "Library">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.sienna.dailyInteractions.talk += 1>>
<<set $locationStaff.sienna.love += 1>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/sienna/ashley_talk.png" alt="Sienna behind the bar">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.sienna.face" alt="Sienna"></div>
<div class="dialog-text sienna">Name the pour. I don't do life stories on the first whiskey.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Then just the pour.</div>
</div>
<p class="spy-narrative">The bottles behind her catch the gold light. She already decided you are a tab, not a friend.</p>
<div class="menu-buttons">
<<link "Step away">><<goto "BarGildedLily">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.sienna.dailyInteractions.flirt += 1>>
<<set $locationStaff.sienna.lust += 2>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/sienna/ashley_flirt.png" alt="Sienna at the rail">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.sienna.face" alt="Sienna"></div>
<div class="dialog-text sienna">That look doesn't pay the till. Try again with a drink in your hand.</div>
</div>
<div class="menu-buttons">
<<link "Step away">><<goto "BarGildedLily">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.nikki.dailyInteractions.talk += 1>>
<<set $locationStaff.nikki.love += 1>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/nikki/lexi_talk.png" alt="Nikki in the studio">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.nikki.face" alt="Nikki"></div>
<div class="dialog-text nikki">Sign in. If you're here for yoga, studio's open. If you're here to stare, at least pick up a mat.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I'll sign in.</div>
</div>
<p class="spy-narrative">Rolled mats, wall of mirror, her hands already explaining something. She is staff. Tiffany is the one who asks for a spot.</p>
<div class="menu-buttons">
<<link "Back to the floor">><<goto "Gym">><</link>>
</div>
</div><<silently>>
<<set $locationStaff.nikki.dailyInteractions.flirt += 1>>
<<set $locationStaff.nikki.lust += 2>>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/nikki/lexi_flirt.png" alt="Nikki pointing">
</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img @src="$locationStaff.nikki.face" alt="Nikki"></div>
<div class="dialog-text nikki">I caught that. Eyes on your own form. Or take the class and earn the look.</div>
</div>
<div class="menu-buttons">
<<link "Back to the floor">><<goto "Gym">><</link>>
</div>
</div><div class="game-container event-container"> <!-- Reutilizando o estilo de evento -->
<h2 class="event-title">A New Chapter (and a New City)</h2>
<div class="environment-container">
<div class="environment-image">
<!-- Imagem da Carol em cima do jogador na cama -->
<img src="img/chars/carol/tease/alexa_underboob.jpg" alt="Carol leaning over player in bed">
</div>
<p class="event-narrative" style="margin-top:10px;">
You slowly open your eyes on Monday morning, the weight of the weekend's events and your uncertain future still heavy on your mind. But instead of your usual ceiling, the first thing you see is Aunt Carol leaning over you, already dressed in a short top, a playful smile on her face. She smells faintly of coffee and her usual perfume.
</p>
</div>
<div class="dialog-container event-dialog-mother"> <!-- Usando classe da mãe para Carol aqui, ou crie uma nova para ela -->
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
Gooood morning, sleepyhead! Or should I say, good morning, new housemate? Slept well after all the drama last night? I figured since you're going to be my... *guest*... for a while longer, it's probably a good idea for you to get to know the town a bit. Can't have you cooped up in here with just your old auntie all the time, as tempting as that might be for both of us.
</div>
</div>
<div class="dialog-container event-dialog-player">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Listening)">
</div>
<div class="dialog-text player">
(Still a bit dazed) Morning, Aunt Carol... Yeah, I guess you're right. I don't really know anything around here besides your place and the store.
</div>
</div>
<p class="event-narrative">
She chuckles, ruffling your hair before hopping off the bed. "Exactly! So, I made a little mental list for you. And here..." She hands you an older, but still functional, laptop. "My old one. Figured you might want some privacy for your... internet activities, or if you want to look for some small jobs to earn a bit of cash. Don't want you getting bored."
</p>
<div class="locations-list-container">
<p class="city-locations-intro">"So, about town," she begins, ticking points off on her fingers:</p>
<h4><span class="emoji">🏘️</span> Our Neighborhood:</h4>
<ul>
<li><span class="emoji">👩👧👦</span> You already know Angela, our lovely green-thumbed neighbor.</li>
<li><span class="emoji">💅</span> There are a couple of other ladies on the street... Brandi next door can be a bit of a snob, a real Karen sometimes, so maybe steer clear unless you enjoy drama. But the others are generally nice.</li>
</ul>
<h4><span class="emoji">🚶</span> Close By (Walking Distance):</h4>
<ul>
<li><span class="emoji">🌳</span> The Park is just a few blocks away, good for a walk or just relaxing.</li>
<li><span class="emoji">🏪</span> And of course, the Local Store with our dear Skylar. Always something happening there.</li>
</ul>
<h4><span class="emoji">🏙️</span> City Center (A bit of a walk, or you can take a bus):</h4>
<ul>
<li><span class="emoji">🏋️</span> There's a decent Gym if you want to... bulk up.</li>
<li><span class="emoji">🏢</span> Some Apartments, if you ever feel like looking for your own place... eventually.</li>
<li><span class="emoji">🍸</span> A couple of Bars, for when you're old enough... or look old enough.</li>
<li><span class="emoji">🛍️</span> The Mall, which has all sorts of little shops – clothes, electronics, a food court, the usual.</li>
</ul>
<h4><span class="emoji">⚠️</span> The Outskirts / Ghetto Area:</h4>
<ul>
<li><span class="emoji">🚫</span> Now, listen to me carefully. There's an area further out, towards the old industrial park... let's just call it the 'Ghetto' or the 'Outskirts'. <span class="ghetto-warning">I don't want you going there. Ever. It's not safe, especially for someone new in town. Just... stay away from there, okay? Promise me.</span> I'm not even going to tell you what's there because you don't need to know.</li>
</ul>
</div>
<div class="dialog-container event-dialog-mother">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
So, lots to explore! Your phone should get decent signal for maps and stuff. And with the laptop, you can look up bus schedules, maybe find some part-time work around town if you want some spending money. The world's your oyster, sweetie... or at least, this little corner of it is.
</div>
</div>
<p class="event-narrative">
The prospect of a whole new environment, new places, new people... and new opportunities with Aunt Carol now that your stay is indefinite... it's a lot to take in. But it's also undeniably exciting.
</p>
<div class="event-conclusion">
<div class="menu-buttons">
<<link "Okay, I think I got all that. Time to explore...">>
<<set $keyEvents.openWorldCarolCity to true>>
<<set $keyEvents.linearWeekendActive to false>>
<<set $events.CityIntroductionByCarol.status to 1>>
<<set $auntCarol.love += 5>>
/* Adiciona o laptop ao inventário do jogador */
<<if !$player.inventory.includes("OldLaptop")>>
<<run $player.inventory.push("OldLaptop")>>
<</if>>
/* Redireciona para o quarto do jogador, onde ele pode agora usar o laptop/celular ou sair */
<<goto "Bedroom">>
/* <<goto "EndOfCurrentContent">> */
<</link>>
</div>
</div>
</div><div class="game-container event-container">
<h2 class="event-title">An Unexpected Call</h2>
<div class="environment-container">
<p class="event-narrative">
It's late Sunday evening. You've just finished packing your bags after a weekend that was... beyond anything you could have imagined. A sense of finality hangs in the air, mixed with the lingering scent of Aunt Carol and a confusing cocktail of arousal and regret. You're idly checking your phone, wondering why your Mom hasn't messaged about her arrival time, when it suddenly buzzes violently in your hand. It's her. Her name on the screen fills you with an unexpected wave of apprehension.
</p>
</div>
<div class="dialog-container event-dialog-player">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Concerned)">
</div>
<div class="dialog-text player">
(Answering) Mom? Hey! What's up? I was just wondering when you'd be here...
</div>
</div>
<p class="event-narrative">
Her voice on the other end is anything but calm. It's strained, cracking, on the verge of tears.
</p>
<div class="dialog-container event-dialog-mother">
<div class="dialog-image">
<img src="img/chars/mom/face/silhouette_face.png" alt="Mother's Silhouette Face">
</div>
<div class="dialog-text system"> <!-- Usando 'system' para a mãe no telefone -->
(Voice shaking) Oh, sweetie... thank god I reached you. Something... something terrible has happened at home. I... I don't even know how to tell you this...
</div>
</div>
<div class="dialog-container event-dialog-player">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Worried)">
</div>
<div class="dialog-text player">
Mom, what is it? What happened? Are you okay?!
</div>
</div>
<p class="event-narrative">
She takes a ragged breath and then the words tumble out in a rush of panic and despair. A major water pipe burst in the basement while no one was there for the weekend. The entire downstairs flooded. Furniture, electronics, precious memories... all ruined or severely damaged. But it gets worse.
</p>
<div class="event-image-container">
<img src="img/layout/player_house/flooded_house.webp" alt="Flooded and damaged house interior">
</div>
<div class="dialog-container event-dialog-mother">
<div class="dialog-image">
<img src="img/chars/mom/face/silhouette_face.png" alt="Mother's Silhouette Face (Distraught)">
</div>
<div class="dialog-text system">
The restoration company just came... they found black mold, sweetie. Toxic black mold, everywhere the water touched. The house... it's not safe. They said it's uninhabitable. We can't go back in there until it's all... remediated. It's going to take months, honey. Months. And I... I have to stay here, at a hotel near the house, to deal with the insurance, the contractors... I can't leave. I can't come get you.
</div>
</div>
<p class="event-narrative">
The words hit you like a physical blow. Your home, gone, at least for now. Stranded. Your mind races, trying to process the sheer scale of the disaster.
</p>
<div class="dialog-container event-dialog-player">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Shocked)">
</div>
<div class="dialog-text player">
Months? But... where am I supposed to go? What am I going to do?
</div>
</div>
<div class="dialog-container event-dialog-mother">
<div class="dialog-image">
<img src="img/chars/mom/face/silhouette_face.png" alt="Mother's Silhouette Face (Apologetic)">
</div>
<div class="dialog-text system">
I know, baby, I know. I'm so, so sorry this is happening. The only thing I can think of... you'll have to talk to Carol. See if... see if you can stay with her for a while longer. Just until we figure things out. It might be for a month, maybe more... Oh, this is all such a mess! Please, just talk to her. I'll call again as soon as I know more. I love you.
</div>
</div>
<p class="event-narrative">
The call ends, leaving an echoing silence in its wake. Your weekend with Aunt Carol has just been extended indefinitely. A strange, almost illicit thrill mixes with the genuine shock and concern for your home. More time with Aunt Carol... The possibilities, both terrifying and exhilarating, begin to bloom in your mind.
</p>
<div class="event-conclusion">
<div class="menu-buttons">
<<link "Numbly hang up and try to find Aunt Carol...">>
<<set $keyEvents.mainHouseProblemRevealed to true>>
<<set $events["MothersCall"].status to 1>> /* Marca este evento como ocorrido */
/* Não há mudança de stats do jogador ou Carol aqui, é puramente informativo/gatilho */
<<goto "TalkToCarolAboutStay">>
<</link>>
</div>
</div>
</div><div class="game-container event-container">
<h2 class="event-title">A Difficult Conversation</h2>
<div class="environment-container">
<p class="event-narrative">
Still reeling from your mother's call, you find Aunt Carol in the living room. She's tidying up a bit from the evening, perhaps humming softly, but she immediately notices your pale face and distressed expression. Her smile fades, replaced by genuine concern.
</p>
</div>
<div class="dialog-container event-dialog-mother"> <!-- Reutilizando para Carol aqui, ajustar CSS se quiser cor diferente para ela -->
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Concerned Face"> <!-- Use uma face preocupada dela -->
</div>
<div class="dialog-text carol"> <!-- Mudado para .carol para estilo correto -->
Sweetie? What's wrong? You look like you've seen a ghost. Did something happen with your mom's call? Is she okay?
</div>
</div>
<p class="event-narrative">
The words spill out of you – the flood, the damage, the toxic mold, your childhood home rendered uninhabitable for months. You explain how your mom is stuck there dealing with everything and that you... you have nowhere to go right now. The weight of it all makes your voice tremble.
</p>
<div class="dialog-container event-dialog-player">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Distraught)">
</div>
<div class="dialog-text player">
...and she said I should ask you if... if maybe I could... stay here a bit longer? I don't know what else to do, Aunt Carol. I'm so sorry to impose...
</div>
</div>
<p class="event-narrative">
Before you can even finish, or properly start to apologize for the burden, Carol steps forward, her expression softening into one of profound sympathy and something else... a warmth that goes beyond simple familial duty.
</p>
<div class="dialog-container event-dialog-mother">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Warm/Reassuring Face">
</div>
<div class="dialog-text carol">
(Voice gentle but firm) Oh, honey, don't you dare apologize! Of course, you can stay! For as long as you need. A month? Two? Indefinitely! This is your home for now too. We'll figure everything out. Your mom needs to focus on the house, and you need a safe, comfortable place to be. And I... well, I certainly won't mind the company.
</div>
</div>
<p class="event-narrative">
She pulls you into a surprisingly strong, comforting hug. It's not like the playful or teasing hugs from before; this one feels genuinely supportive, though you can't help but notice the softness of her body pressed against yours.
</p>
<div class="dialog-container event-dialog-mother">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Caring Face">
</div>
<div class="dialog-text carol">
There, there. It's going to be okay. You look exhausted, poor thing. Why don't you head off to bed? Get some rest. We can talk more in the morning. Don't you worry about a thing tonight.
</div>
</div>
<p class="event-narrative">
Her reassurance, despite the chaos of the news, does bring a sliver of comfort. The thought of an extended stay here, under her roof, with all its complicated undertones, is a dizzying prospect. But right now, all you feel is an overwhelming tiredness and a strange sense of inevitability.
</p>
<div class="event-conclusion">
<div class="menu-buttons">
<<link "Nod gratefully and head to your room...">>
<<set $keyEvents.carolAwareOfProblem to true>> /* Se você tiver esta flag */
<<set $keyEvents.extendedStayApproved to true>> /* Se você tiver esta flag */
<<set $events.CarolAgreesToStay.status to 1>> /* Marca este evento como ocorrido */
<<set $auntCarol.love += 15>>
<<set $auntCarol.caring += 5>> /* Aumenta o stat de 'caring' dela */
/* O jogador está indo dormir, então o próximo passo é a sequência de sono */
<<goto "EveningFarewellBJ">>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_messy_small.png" alt="Guest Bedroom">
</div>
<p class="spy-narrative">
You drop your bag onto the bed in the guest room. The bedspread looks freshly changed. There's a small stack of folded towels on the dresser, a glass of water on the nightstand. Little touches. She prepared for you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) She really went out of her way. It's been years since I've stayed here. Feels strange — but the good kind of strange.
</div>
</div>
<p class="spy-narrative">
From downstairs, you hear the sizzle of a pan and Aunt Carol humming to herself. Whatever she's making, it smells incredible. Your stomach reminds you that the bus snacks were a long time ago.
</p>
<div class="menu-buttons">
[[Head down to the kitchen->KitchenPreparation]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Carol's House at Night">
</div>
<p class="spy-narrative">
Dinner is over. Carol clears the last of the plates, waving off your offer to help. "First night, sweetie. You've earned the rest. Go get settled in." She gives you a warm smile and a soft pat on the shoulder as you pass.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Long day. Long bus ride. I should probably just turn in. Wish her goodnight on the way upstairs and call it.
</div>
</div>
<p class="spy-narrative">
You climb the staircase slowly, the old wood creaking under your feet. Carol's bedroom door is ahead on the right. The hallway is dim — just one wall sconce on. You see warm light glowing from under her door.
</p>
<div class="menu-buttons">
[[Stop by her room before heading to bed->Bedtime]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="Guest Bedroom at Night">
</div>
<p class="spy-narrative">
You change into something comfortable and slip under the covers. The bed is soft, and exhaustion quickly claims you. The sounds of the house fade away as you drift off...
</p>
</div>
<div class="dream-container">
<p class="dream-intro-text">...and fall into a restless sleep...</p>
<div class="dream-media-container">
<video class="dream-media" autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_dance_flirt.webm" style="pointer-events: none;" alt="Dream Sequence - Dance Flirt"></video>
</div>
<p class="dream-description-text">
You dream of Aunt Carol... but younger somehow, vibrant. She's in the living room, wearing a short skirt, dancing playfully just for you, a flirtatious smile on her lips. It feels innocent, yet charged with potential...
</p>
</div>
<<silently>>
<<set $actualDay to "Saturday">>
<<set $time to 7>>
<<set $player.energy to 100>>
<<set $player.lust to Math.clamp($player.lust + 5, 10, 30)>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $auntCarol.dailyReplayCount to 0>>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, approach: 0 } >>
<<set $neighborAngela.dailyReplayCount to 0>>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $storeSkylar.dailyReplayCount to 0>>
<<set $dayNumber += 1>>
<</silently>>
<p class="wake-up-text">
You wake up feeling refreshed, the morning sun filtering through the window. It's Saturday, 7:00 AM.
</p>
<div class="menu-buttons">
[[Start the new day->SaturdayWakeNarrative]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="Bedroom in the morning">
</div>
<p class="spy-narrative">
Sunlight streams through the guest room curtains. You stretch, the unfamiliar ceiling reminding you where you are. The smell of fresh coffee drifts from downstairs — Aunt Carol is already up.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Saturday morning. A full day ahead. I should probably help out around the house — Aunt Carol seemed like she could use a hand.
</div>
</div>
<p class="spy-narrative">
You pull on some clothes and head downstairs. The house is quiet except for the sound of running water in the kitchen.
</p>
<div class="menu-buttons">
[[Head to the kitchen->KitchenChores]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_small.jpg" alt="Kitchen">
</div>
<p class="spy-narrative">
The dishes are done. Aunt Carol pours herself another coffee, leaning against the counter with that easy smile of hers. She glances at you over the rim of her mug.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
You're such a sweetheart for helping with those dishes. The house already feels better with you here. Come on — let's tackle the living room while we're at it.
</div>
</div>
<p class="spy-narrative">
She takes one last sip of coffee, sets the mug down, and tilts her head toward the hallway. The morning light spills into the next room as you follow her out of the kitchen.
</p>
<div class="menu-buttons">
[[Help with the living room->LivingRoomChores]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Carol's House">
</div>
<p class="spy-narrative">
The morning flew by. Between chores and Carol's antics, the sun is already climbing toward its peak. You find yourself in the hallway, catching your breath after that... dance performance.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) She's been different today. More playful. That dance wasn't normal aunt behavior. But I can't just stand here thinking about it — there's still work to do.
</div>
</div>
<p class="spy-narrative">
Through the back window, you can see the pool glinting in the midday sun. It could use a cleaning, and Carol did mention she'd be out there later.
</p>
<div class="menu-buttons">
[[Head to the pool area->PoolChores]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom">
</div>
<p class="spy-narrative">
Your heart is still pounding. You lean against the hallway wall, replaying what just happened. She caught you spying — she KNEW. But instead of anger... she showed you more. She let you see.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) What does this even mean? Is she actually into this, or just messing with my head? The lines between aunt and... something else are blurring fast. I can't deny the tension anymore. But how far will she let it go?
</div>
</div>
<p class="spy-narrative">
You take a long breath. You can hear her moving around downstairs already — probably starting on dinner. Whatever just happened in that bathroom hangs in the air between you, unspoken. You'd better go down before she comes looking.
</p>
<div class="menu-buttons">
[[Head down for dinner->CarolTenseDinner]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room - Evening">
</div>
<p class="spy-narrative">
Dinner ends in heavy silence. Carol disappears toward the living room without saying much, leaving you alone at the table. The afternoon's tension hasn't lifted — if anything, it's gotten thicker. You hear the soft clink of a wine glass in the next room. She's settling in for the evening.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) The way she looked at me during the package drop-off... the bathroom... the silence at dinner. Something tells me tonight is going to be different.
</div>
</div>
<div class="menu-buttons">
[[Go see what she's up to...->EveningWineProvocation]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="spy-narrative">
Your face is still burning. She just... took off her top. Completely bared herself to you. The image of her bare chest, her nipples hard in the dim light, is seared into your brain.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) That wasn't subtle at all. She WANTED me to see. Was that just the wine talking? Or has she been waiting for an excuse? I should clear my head — the kitchen's a mess. She'll appreciate the help, and I need to do something with my hands.
</div>
</div>
<p class="spy-narrative">
You head for the sink, the image of her bare chest refusing to leave your mind no matter how hard you scrub.
</p>
<div class="menu-buttons">
[[Head to the kitchen->EveningDishes]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/hallway_night_door_ajar.jpg" alt="Hallway at night, Carol's door ajar">
</div>
<p class="spy-narrative">
The house is dead quiet. You should be asleep. Instead, you're standing in the dark hallway in your boxers, staring at Aunt Carol's bedroom door. After what just happened — her hand, her mouth, the way she locked you out — your body is wired. You can hear nothing on the other side. She's asleep. Or pretending to be.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) She locked the door. She made it clear. I should turn around right now and go to bed.
</div>
</div>
<p class="spy-narrative">
Your hand hovers over the doorknob. You could try the handle — see if it actually turned, or if she only made the gesture. You could push it open and slip in. She's drunk and tired. She wouldn't even know.
</p>
<div class="menu-buttons">
<<link "Step away from the door and go to bed">>
<<goto "SaturdayNightSleep">>
<</link>>
<<link "Try the handle and slip into her room">>
<<set $gameOverReason to "arrested">>
<<goto "GameOver">>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="Guest Bedroom at Night">
</div>
<p class="spy-narrative">
You change into something comfortable and slip under the covers. The bed is soft, and exhaustion quickly claims you. The sounds of the house fade away as you drift off...
</p>
</div>
<div class="dream-container">
<p class="dream-intro-text">...and fall into a restless sleep...</p>
<div class="dream-media-container">
<video class="dream-media" autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_joi.webm" style="pointer-events: none;" alt="Dream Sequence"></video>
</div>
<p class="dream-description-text">
The dream shifts. You're lying down, looking up at Aunt Carol. She's leaning over you, her breasts full and bare, swaying gently. Her voice is a husky whisper, instructing you, guiding you... a torrent of pleasure builds until you finally release with a jolt. You wake up slightly sticky...
</p>
</div>
<<silently>>
<<set $actualDay to "Sunday">>
<<set $time to 7>>
<<set $player.energy to 100>>
<<set $player.lust to 20>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $auntCarol.dailyReplayCount to 0>>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, approach: 0 } >>
<<set $neighborAngela.dailyReplayCount to 0>>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $storeSkylar.dailyReplayCount to 0>>
<<set $dayNumber += 1>>
<</silently>>
<div class="menu-buttons">
[[You stir in your sleep...->SundayWakeNarrative]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="Bedroom - Sunday Morning">
</div>
<p class="spy-narrative">
You're barely conscious when you feel it — a warm, rhythmic pressure against your groin. Your eyes flutter open. The dream from last night was so vivid... but this doesn't feel like a dream anymore.
</p>
</div>
<p class="spy-narrative">
Morning light catches the edges of the window blinds. The house is quiet. But something — or someone — is definitely in your room.
</p>
<div class="menu-buttons">
[[Try to focus your eyes...->SundayTitsjobPrelude]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="Bedroom">
</div>
<p class="spy-narrative">
Your eyes finally focus. Aunt Carol is perched on the edge of your bed, already dressed in a tight workout top. She's humming to herself, applying lotion to her arms. The pressure you felt — she's leaning over you, and her chest is... very close.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Face">
</div>
<div class="dialog-text carol">
Morning, sleepyhead. I wanted to make sure you started your last day here... *properly*. You've been such a good boy all weekend. I thought you deserved a reward. Tell me to stop and I'll stop. Or just nod, and let me take care of you.
</div>
</div>
<p class="spy-narrative">
You meet her eyes. There's no rush in them — only a careful, knowing patience. After a beat, you nod. Her smile widens. "Good answer," she whispers, leaning closer. The warmth of her body settles against you as she takes the lead.
</p>
<div class="menu-buttons">
[[Let her take the lead...->MorningSurpriseTitsjob]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom.jpg" alt="Bathroom">
</div>
<p class="spy-narrative">
The morning was intense — waking up to her, the lightbulb in her room, chasing the remote, then that shared shower. You can still feel the warm steam on your skin, the sight of her lotion-slicked body.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) It's Sunday — my last full day here. After everything that's happened, the thought of leaving tomorrow feels wrong. But there are still things to do. Angela's garden needs help, and Carol mentioned the store...
</div>
</div>
<p class="spy-narrative">
You pull yourself together. The day isn't going to wait. Better make this last day count.
</p>
<div class="menu-buttons">
[[Head over to Angela's->HelpAngelaPlant]]
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="Bedroom">
</div>
<p class="spy-narrative">
Your bags are packed. The weekend is technically over. Tomorrow morning you're supposed to leave. But as you sit on the edge of the bed, the weight of everything that happened settles over you.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) Two days. Two days with Aunt Carol, and everything has changed. The way she looked at me during dinner. The wine. The bathroom. Last night... I can't just go back to normal after this. But I don't have a choice — Mom's picking me up tomorrow.
</div>
</div>
<<if $auntCarol.love >= 25>>
<p class="spy-narrative">
Despite the chaos — or maybe because of it — there's a warmth in your chest when you think about her. She cares about you. You can feel it. Whatever happens tomorrow, these two days changed something between you that can't be undone. Part of you doesn't want it to be.
</p>
<div class="menu-buttons">
[[Check your phone...->MotherCall]]
</div>
<<else>>
<<silently>>
<<set $gameOverReason to "lowLove">>
<</silently>>
<p class="spy-narrative">
But there's a knot in your stomach too. You pushed too hard at times. Moved too fast. The moments that felt exciting at the time now feel reckless — and you can't shake the feeling that she's already counting the hours until you leave. From downstairs, you hear Carol on the phone in a tone that doesn't quite match her usual warmth.
</p>
<div class="menu-buttons">
[[The phone keeps ringing in your pocket...->GameOver]]
</div>
<</if>>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="Guest Bedroom at Night">
</div>
<p class="spy-narrative">
You change into something comfortable and slip under the covers. The bed is soft, and exhaustion quickly claims you. The sounds of the house fade away as you drift off...
</p>
</div>
<div class="dream-container">
<p class="dream-intro-text">...and fall into a restless sleep...</p>
<div class="dream-media-container">
<video class="dream-media" autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_pregnant.webm" style="pointer-events: none;" alt="Dream Sequence"></video>
</div>
<p class="dream-description-text">
It's a strange, unsettling dream. Aunt Carol is lounging outdoors, wearing lingerie, but her belly is impossibly round and swollen, pregnant. She strokes her stomach proudly, her gaze heavy and possessive as she looks at you. It's bizarre, maternal, yet deeply erotic in a way that disturbs you...
</p>
</div>
<<silently>>
<<set $actualDay to "Monday">>
<<set $time to 8>>
<<set $player.energy to 100>>
<<set $player.lust to 25>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $auntCarol.dailyReplayCount to 0>>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, approach: 0 } >>
<<set $neighborAngela.dailyReplayCount to 0>>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, approach: 0 } >>
<<set $storeSkylar.dailyReplayCount to 0>>
<<set $dayNumber += 1>>
<</silently>>
<div class="menu-buttons">
[[You begin to wake up on a new day...->CarolExplainsCityLife]]
</div>
</div><<silently>>
/* Defensive: if reason is unset, default to a generic ending. */
<<if not $gameOverReason>>
<<set $gameOverReason to "generic">>
<</if>>
<</silently>>
<div class="game-container game-over-screen">
<h1 class="game-over-title">GAME OVER</h1>
<<switch $gameOverReason>>
<<case "kickedOut">>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Carol's House">
</div>
<p class="spy-narrative">
Aunt Carol's expression shifts from shock to cold fury. Her eyes narrow, and her voice drops to a sharp, cutting tone you've never heard from her before.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol Angry Face">
</div>
<div class="dialog-text carol">
I don't know what you thought this was, but you just crossed a line. A line you cannot uncross. Pack your things. You're leaving tonight. I'll call your mother and tell her something came up.
</div>
</div>
<p class="spy-narrative">
There's no arguing with her. The look in her eyes leaves no room for negotiation. You gather your things in shame and head for the door. The weekend ends before it ever really began.
</p>
<<case "arrested">>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Carol's House">
</div>
<p class="spy-narrative">
Aunt Carol's face goes pale. Her hand trembles as she reaches for her phone. Her eyes never leave you — they're wide, frightened, and filled with a hurt so deep it cuts through the air like glass.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_mad.png" alt="Carol Terrified Face">
</div>
<div class="dialog-text carol">
What... what is WRONG with you? I'm calling the police. Don't you dare move.
</div>
</div>
<p class="spy-narrative">
It's too late. She's already dialing. The operator's voice crackles through the speaker. You hear "trespassing" and "assault" and your blood runs cold. Within minutes, flashing blue and red lights fill the driveway. Some boundaries cannot be crossed. You found one of them.
</p>
<<case "lowLove">>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="Carol's House">
</div>
<p class="spy-narrative">
The next morning comes too quickly. Carol has already called your mother — the flooded house can wait, she says. You'd be more comfortable back home. She gives you a warm but distant hug at the door. "It was lovely having you, sweetie. Drive safe." There's no invitation to come back soon. No lingering touch. Just politeness.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
(Thinking) She's pulling away. I can feel it. Whatever could have been... won't be. The weekend was just a weekend.
</div>
</div>
<p class="spy-narrative">
You load your bags into the car and watch her house shrink in the rearview mirror. Excitement without genuine connection leaves you with nothing but memories you're not sure you should have.
</p>
<<default>>
<p class="spy-narrative">
The story ends here. Some choices close more doors than they open.
</p>
<</switch>>
<div class="menu-buttons">
<<link "Return to Main Menu">>
<<run Engine.restart()>>
<</link>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem da Sala, Carol relaxando, talvez com uma revista -->
<img src="img/layout/livingroom/livingroom_carol_relaxing.jpg" alt="Carol relaxing in the Living Room">
</div>
<p class="spy-narrative">
You find Aunt Carol lounging comfortably on the living room sofa, flipping through a magazine. She looks up as you enter, a warm smile gracing her lips.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
Oh, there you are, sweetie. Listen, would you mind doing a small errand for me? I ordered something... a little treat for myself... and it arrived at the Local Store. Could you possibly pop over and pick it up for me sometime this morning or early afternoon? Skylar knows it's for me.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
A treat? Sure, Aunt Carol, no problem at all. I can head over there soon. Consider it done.
</div>
</div>
<div class="environment-container">
<p class="spy-narrative">
She gives you a grateful nod, her eyes perhaps lingering on you a moment longer than necessary. What kind of "treat" would she order?
</p>
</div>
<!-- Conclusão da Missão 007 - Aceitar o Pedido -->
<div id="completion-section" style="text-align: center; margin-top: 25px;">
<p style="font-style: italic; color: #D4AF37; margin-bottom: 15px;">You've agreed to pick up the package. The next step is to visit the Local Store.</p>
<!-- Botão para confirmar e voltar -->
<div class="menu-buttons">
<<link "Okay, I'll head there when I can">>
<<set $missions["007"].status to 1>> /* Marca a missão de pedir como concluída */
<<set $auntCarol.love to $auntCarol.love + 5>> /* Pequeno bônus por concordar */
<<goto "StorePackagePickup">>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bathroom/bathroom_messy.jpg" alt="Messy Bathroom">
</div>
<p class="spy-narrative">
You step into the bathroom and immediately notice it could use a good cleaning. The mirror has water spots, there are soap residues on the sink, and the shower could definitely use some attention. Time to roll up your sleeves and get to work.
</p>
</div>
<!-- Interface de Limpeza -->
<div class="cleaning-interface">
<h3 class="cleaning-title">Bathroom Cleaning Tasks</h3>
<!-- Barra de Progresso -->
<div class="progress-container">
<div class="progress-bar">
<div id="progress-fill" class="progress-fill"></div>
</div>
<span id="progress-text" class="progress-text">0% Complete</span>
</div>
<!-- Botões de Tarefas -->
<div class="cleaning-tasks">
<div class="task-row">
<<link "🚽 Clean Toilet">>
<<run window.bathroomCleaning.completeTask('clean-toilet')>>
<</link>>
<<link "🚿 Clean Sink">>
<<run window.bathroomCleaning.completeTask('clean-sink')>>
<</link>>
</div>
<div class="task-row">
<<link "🛁 Clean Shower">>
<<run window.bathroomCleaning.completeTask('clean-shower')>>
<</link>>
<<link "🪟 Clean Mirror">>
<<run window.bathroomCleaning.completeTask('clean-mirror')>>
<</link>>
</div>
<div class="task-row">
<<link "🧹 Sweep Floor">>
<<run window.bathroomCleaning.completeTask('sweep-floor')>>
<</link>>
<<link "📦 Organize Items">>
<<run window.bathroomCleaning.completeTask('organize-items')>>
<</link>>
</div>
</div>
<!-- Feedback de Ação -->
<div id="cleaning-feedback" class="cleaning-feedback"></div>
</div>
<!-- Seção para completar a missão (Aparece quando 100%) -->
<div id="completion-section" class="completion-hidden" style="text-align: center; margin-top: 25px;">
<p class="spy-narrative" style="margin-bottom: 15px;">
Perfect! The bathroom is now spotless and fresh. You wipe the sweat from your brow, feeling satisfied with your hard work. Aunt Carol will definitely appreciate this.
</p>
<div class="menu-buttons">
<<link "Finish Cleaning">>
<<replace "#completion-section">>
<p class="spy-narrative" style="margin-bottom: 15px;">
You gather the cleaning supplies and take one last look at your handiwork. The bathroom sparkles like new. Time to let Aunt Carol know it's done.
</p>
<!-- Atualiza o estado do jogo -->
<<set $missions["008"].status to 1>>
<<set $player.energy to $player.energy - 10>>
<<set $auntCarol.love to $auntCarol.love + 10>>
<<set $auntCarol.lust to $auntCarol.lust + 5>>
<<set $player.money to $player.money + 10>>
<<set $time to $time + 1>>
<!-- Botão para sair -->
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->BathroomSpyScene]]
</div>
<</replace>>
<</link>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Change Bedroom Lightbulb
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Aunt Carol's Bedroom">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Later, around noon, Aunt Carol mentions that the main light in her bedroom burned out. "Could you be a dear and swap it for me, sweetie? The new bulbs are in the kitchen pantry, and there's a small stepladder in the hall closet if you need it. I'd do it, but I'm a little nervous with heights these days." You head to her bedroom to tackle the task.
</p>
</div>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="lightbulb-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom_carol/bedroom_small.jpg" alt="Carol's Bedroom in the Afternoon">
</div>
<p class="spy-narrative">
You find Aunt Carol relaxing in her bedroom, the afternoon light filtering through the blinds. She's fiddling with her phone, a slight frown on her face.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_puzzled.jpg" alt="Carol Puzzled Face">
</div>
<div class="dialog-text carol">
Oh, hey there. You know, I've been trying to clear some space on this phone, delete some old photos... but I swear, technology just gets more complicated! Could you give me a hand, sweetie? Just get rid of some duplicates or blurry ones?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
No problem, Aunt Carol. Let me take a look. I can probably sort it out quickly.
</div>
</div>
<p class="spy-narrative">
She hands you her phone with a grateful smile. You unlock it and start navigating through her photo gallery. There are lots of scenic shots, family pictures... and then, tucked away, you stumble upon a folder simply labeled "Private". Curiosity gets the better of you...
</p>
<!-- ===== Carrossel HTML (Versão simplificada) ===== -->
<div id="carousel" class="carousel">
<img src="img/chars/carol/polaroids/carol_polaroid_1.jpg" class="carousel-img active" alt="Carol Polaroid 1 - Beach day memories...">
<img src="img/chars/carol/polaroids/carol_polaroid_2.jpg" class="carousel-img" alt="Carol Polaroid 2 - Feeling playful...">
<img src="img/chars/carol/polaroids/carol_polaroid_3.jpg" class="carousel-img" alt="Carol Polaroid 3 - Just relaxing...">
</div>
<!-- Controles do Carrossel -->
<div class="carousel-controls">
<<link "◀ Previous">>
<<run window.carouselPrevious()>>
<</link>>
<<link "Next ▶">>
<<run window.carouselNext()>>
<</link>>
</div>
<!-- ===== Fim do Carrossel HTML ===== -->
<p class="spy-narrative">
Your heart beats a little faster looking at these. They definitely weren't meant for your eyes... After lingering perhaps a bit too long, you remember why you have the phone.
</p>
<!-- Seção para completar a missão (Controlada pelo SugarCube) -->
<div id="completion-section" style="text-align: center; margin-top: 25px;">
<!-- O Link do SugarCube que INICIA a conclusão da missão -->
<div class="menu-buttons">
<<link "Finish 'Deleting' Photos">>
<!-- O código DENTRO do link SÓ executa ao clicar -->
<<replace "#completion-section">>
<p class="spy-narrative" style="margin-bottom: 15px;">You quickly tap delete on a few genuinely blurry photos and hand the phone back to Carol, trying to look nonchalant.</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_puzzled.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
All done? Thank you so much, dear! You're a lifesaver. See? That wasn't so hard. You deserve a little reward for your effort.
</div>
</div>
<!-- Atualiza o estado do jogo AQUI -->
<<set $missions["005"].status to 1>>
<<set $player.energy to $player.energy - 5>>
<<set $auntCarol.love to $auntCarol.love + 15>>
<<set $auntCarol.corruption to $auntCarol.corruption + 5>>
<<set $time to $time + 1>>
<!-- Botão SugarCube para sair da passagem APÓS completar -->
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->WardrobeHelp]]
</div>
<</replace>>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem da Sala, Carol talvez esperando ansiosamente -->
<img src="img/layout/livingroom/livingroom_carol_waiting.jpg" alt="Carol waiting in the Living Room">
</div>
<p class="spy-narrative">
You return to the living room, holding the package Skylar gave you. Aunt Carol looks up immediately, her eyes lighting up with anticipation.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Got your package, Aunt Carol. Skylar said you'd been ordering some interesting things.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Imagem de Carol, talvez levemente corada ou sorrindo maliciosamente -->
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Blushing Face">
</div>
<div class="dialog-text carol">
Oh, did she now? That girl needs to learn some discretion. But yes, thank you, sweetie! She reaches for the package eagerly, her fingers brushing against yours as she takes it. Let's see...
</div>
</div>
<p class="spy-narrative">
She tears a small corner of the wrapping paper... revealing a glimpse of silky lace fabric in a deep crimson color before quickly covering it back up, though not before you catch sight of it. She glances at you, noticing your gaze.
</p>
<!-- Interação - Reação do Jogador -->
<div class="game-choice" style="margin-top: 20px;">
<h3>Your Reaction</h3>
<p>You saw a flash of what looks like expensive lingerie. How do you react?</p>
<div class="answer-options" id="delivery-reaction-options">
<<button "Look away quickly, pretend you saw nothing.">>
<<replace "#delivery-reaction-options">>
<div class="dialog-container" style="margin-top:10px;">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_blushing.jpg" alt="Carol Pleased Face">
</div>
<div class="dialog-text carol">
(Smiling softly) Such a gentleman. Well, thank you again for fetching this for me. You've earned your reward.
</div>
</div>
<!-- Atualiza estado - Recompensa Padrão -->
<<set $missions["007.3"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 15>>
<<set $player.money to $player.money + 20>>
<<set $auntCarol.corruption to $auntCarol.corruption + 5>>
<<run $player.inventory.delete("CarolPackage")>> /* Remove o item */
<<set $time to $time + 1>> /* Tempo para entrega e interação */
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->AskTakePackageToAngela]]
</div>
<</replace>>
<</button>>
<<button "'Treating yourself to something nice, Aunt Carol?' (Teasing smile)">>
<<replace "#delivery-reaction-options">>
<div class="dialog-container" style="margin-top:10px;">
<div class="dialog-image">
<!-- Talvez uma face mais ousada/provocante -->
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly Face">
</div>
<div class="dialog-text carol">
(Chuckles, holding the package close) Maybe I am. A woman needs her little luxuries, doesn't she? Glad you approve... implicitly. Here's a little something for your trouble.
</div>
</div>
<!-- Atualiza estado - Recompensa com Bônus Corrupção -->
<<set $missions["007.3"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 15>>
<<set $player.money to $player.money + 20>>
<<set $auntCarol.corruption to $auntCarol.corruption + 8>> /* Corrupção Bônus */
<<run $player.inventory.delete("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->AskTakePackageToAngela]]
</div>
<</replace>>
<</button>>
<<button "(Stare for a second too long) That looks... nice.">>
<<replace "#delivery-reaction-options">>
<div class="dialog-container" style="margin-top:10px;">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_surprised.jpg" alt="Carol Surprised/Flustered Face">
</div>
<div class="dialog-text carol">
(Slightly flustered but recovers) Oh! Well... thank you, I suppose. It's just some... fabric. Anyway! Thank you for getting it! Here you go.
</div>
</div>
<!-- Atualiza estado - Recompensa com Bônus Corrupção Médio -->
<<set $missions["007.3"].status to 1>>
<<set $auntCarol.love to $auntCarol.love + 14>> /* Leve penalidade no amor por ser direto demais? */
<<set $player.money to $player.money + 20>>
<<set $auntCarol.corruption to $auntCarol.corruption + 7>> /* Corrupção Bônus Médio */
<<run $player.inventory.delete("CarolPackage")>>
<<set $time to $time + 1>>
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->AskTakePackageToAngela]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/kitchen/kitchen_night_dishes.jpg" alt="Kitchen at Night with Dirty Dishes">
</div>
<p class="spy-narrative">
You enter the kitchen in the evening and find a pile of dirty dishes waiting in the sink. Plates, glasses, silverware, and a few pots are stacked up from the day's meals. Time to roll up your sleeves and get these clean.
</p>
</div>
<!-- Interface de Lavar Louça -->
<div class="dishwashing-interface">
<h3 class="dishwashing-title">Evening Dish Washing</h3>
<!-- Barra de Progresso -->
<div class="progress-container">
<div class="progress-bar">
<div id="dishes-progress-fill" class="progress-fill"></div>
</div>
<span id="dishes-progress-text" class="progress-text">0% Complete</span>
</div>
<!-- Status Atual -->
<div id="current-dish-status" class="current-status">
<p>Ready to start washing dishes!</p>
</div>
<div class="dishwashing-actions">
<div class="action-row">
<<link "🧽 Soap & Scrub">>
<<run setup.performDishAction('soap')>>
<</link>>
<<link "🚿 Rinse Clean">>
<<run setup.performDishAction('rinse')>>
<</link>>
<<link "🧻 Dry & Store">>
<<run setup.performDishAction('dry')>>
<</link>>
</div>
</div>
<!-- Contador de Louças -->
<div class="dish-counter">
<div class="counter-item">
<span class="dish-icon">🍽️</span>
<span id="plates-count">4 Plates</span>
</div>
<div class="counter-item">
<span class="dish-icon">🥛</span>
<span id="glasses-count">3 Glasses</span>
</div>
<div class="counter-item">
<span class="dish-icon">🍴</span>
<span id="silverware-count">3 Silverware</span>
</div>
<div class="counter-item">
<span class="dish-icon">🍳</span>
<span id="pots-count">2 Pots</span>
</div>
</div>
<!-- Feedback de Ação -->
<div id="dishwashing-feedback" class="dishwashing-feedback"></div>
</div>
<!-- Seção para completar a missão -->
<div id="completion-section" class="completion-hidden" style="text-align: center; margin-top: 25px;">
<p class="spy-narrative" style="margin-bottom: 15px;">
Excellent work! All the dishes are now sparkling clean and properly stored away. The kitchen looks perfect, and you feel satisfied with a job well done. Aunt Carol will definitely appreciate coming home to a clean kitchen.
</p>
<div class="menu-buttons">
<<link "Finish Dish Washing">>
<<replace "#completion-section">>
<p class="spy-narrative" style="margin-bottom: 15px;">
You dry your hands and take one final look at the spotless kitchen. Every dish has been washed, dried, and put away in its proper place. The satisfaction of completing this task feels great.
</p>
<!-- Atualiza o estado do jogo -->
<<set $missions["012"].status to 1>>
<<set $player.energy to $player.energy - 8>>
<<set $auntCarol.love to $auntCarol.love + 10>>
<<set $auntCarol.lust to $auntCarol.lust + 3>>
<<set $time to $time + 1>>
<!-- Botão para sair -->
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->NighttimeHandjob]]
</div>
<</replace>>
<</link>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Find the TV Remote
</p>
<div class="environment-container">
<!-- Imagem da sala de estar, talvez um pouco desarrumada da noite anterior -->
<img src="img/layout/livingroom/livingroom_morning_clutter.jpeg" style="max-width: 520px; width: 100%;" alt="Living room in the morning, slightly cluttered">
<p class="mission-narrative-focus" style="margin-top:10px;">
It's Sunday morning. After the... *intense* start to your day, you head to the living room. You find Aunt Carol already there, dressed in an incredibly short pair of athletic shorts and a form-fitting top, paired with sheer black pantyhose that disappear high up her thighs. She's on her hands and knees, rummaging under the sofa, her magnificent ass pointing directly towards the doorway where you've just appeared.
</p>
</div>
<!-- VÍDEO DELA PROCURANDO E DEPOIS PROVOCANDO -->
<div class="mission-video-container" style="text-align: center;">
<video controls autoplay loop muted playsinline style="max-width: 520px; width: 100%; height: auto; border-radius: 8px; display: inline-block;">
<source src="img/chars/carol/tease/alexapearl_smile_tease.webm" type="video/webm">
<!-- Adicione .webm se tiver -->
Your browser doesn't support embedded videos.
</video>
</div>
<p class="mission-narrative-focus">
The video shows her initially focused on her search, her backside prominent and swaying slightly with her movements. Then, she seems to sense your presence, or perhaps just "accidentally" glances back. Her eyes widen for a fraction of a second before a slow, incredibly sly smirk spreads across her face. She doesn't straighten up. Instead, she starts to subtly, then more overtly, roll her hips and bounce her ass, making those short shorts ride up even further. It's a blatant, undeniable tease, all while pretending to still be "looking" for something.
</p>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Sly/Teasing Face">
</div>
<div class="dialog-text carol">
(Her voice slightly muffled from her position, but oozing amusement) Oh! Heeeey, sweetie! Didn't see you there! Just... uh... looking for that darn TV remote. It seems to have sprouted legs and run off. You haven't seen it, have you? Or... were you perhaps admiring the... *scenery* while I search?
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face (Flustered/Aroused)">
</div>
<div class="dialog-text player">
(Stammering) I... uh... no, Aunt Carol. No remote. Just... came in to see if you needed anything.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_sly.jpg" alt="Carol Very Teasing Face">
</div>
<div class="dialog-text carol">
(Chuckles, giving her ass another exaggerated wiggle) Riiiight. "Needed anything." Well, maybe you *do* enjoy the view a little? It's okay, sweetie. No judgment here. A woman likes to know her... *efforts*... are appreciated. Anyway, this remote is a lost cause for now.
</div>
</div>
<p class="mission-narrative-focus">
She finally straightens up, stretching languidly, giving you an unimpeded view of her front in those ridiculously short shorts. The "mission" to find the remote seems to have been a complete, and very deliberate, distraction.
</p>
<div class="mission-interaction-point">
<p class="spy-narrative" style="color: #D4AF37;">"Finding the remote" was clearly not the main objective here...</p>
<div class="menu-buttons">
<<link "Decide to 'give up' the search for now...">>
<<set $missions["013"].status to 1>>
<<set $auntCarol.love += 10>>
<<set $player.money += 5>> /* Talvez ela te dê um troco por "ajudar" */
<<set $auntCarol.lust += 15>> /* A provocação dela funcionou */
<<set $player.lust += 10>> /* E você definitivamente sentiu */
<<set $auntCarol.corruption += 5>>
<<set $time += 1>>
<<goto "AfternoonSharedBath">>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<p class="spy-narrative">
The kitchen smells of fresh herbs and spices. The sink is filled with dishes from the delicious meal Aunt Carol prepared.
</p>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
Sweetheart, would you mind helping out with the dishes? I'll make you dessert later as a reward!
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Of course, Aunt Carol! But… where do you keep the dish soap again?
</div>
</div>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<video autoplay loop muted playsinline src="img/etc/chores/wash_dish.webm" style="pointer-events: none;" alt="Washing Dishes"></video>
</div>
<p class="spy-narrative">
Time to get started — but first, you need to grab the right items for the task. Aunt Carol’s kitchen is a bit of a maze...
</p>
</div>
</div>
<div class="game-challenge" id="kitchenchores-quiz">
<h3>Find the Cleaning Tools</h3>
<p>Which items do you need to wash the dishes properly?</p>
<div class="answer-options">
<<button "Dish Soap & Sponge">>
<<replace "#kitchenchores-quiz">>
<p class="correct-answer">Perfect! Ready to tackle this mountain of dishes.</p>
<<set $missions["002"].status to 1>>
<<set $player.energy -= 5>>
<<set $auntCarol.love += 2>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->KitchenFlirt]]
</div>
<</replace>>
<</button>>
<<button "Toothbrush & Shampoo">>
<<replace "#kitchenchores-quiz">>
<p class="wrong-answer">"Uh… that’s not quite right." Aunt Carol raises an eyebrow, then chuckles and ducks under the sink. "Right here, sweetie." She presses the soap into your hand.</p>
<<set $missions["002"].status to 1>>
<<set $player.energy -= 5>>
<<set $auntCarol.love -= 2>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->KitchenFlirt]]
</div>
<</replace>>
<</button>>
<<button "Broom & Mop">>
<<replace "#kitchenchores-quiz">>
<p class="wrong-answer">"That’s for the floor, not the dishes!" Carol laughs and grabs the soap herself, then hands it to you with a teasing smile.</p>
<<set $missions["002"].status to 1>>
<<set $player.energy -= 5>>
<<set $auntCarol.love -= 2>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->KitchenFlirt]]
</div>
<</replace>>
<</button>>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem estática da sala de estar precisando de uma arrumada leve -->
<img src="img/layout/livingroom/livingroom_cluttered_small.jpg" alt="Living Room needs tidying">
</div>
<p class="spy-narrative">
The morning sun shines into the living room, highlighting some dust motes and revealing a bit of clutter from last night. A few magazines lie on the coffee table, and the sofa cushions are slightly askew. Aunt Carol is sitting comfortably in an armchair, looking thoughtful.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_thinking.jpg" alt="Carol Thinking Face"> <!-- Sugestão de nova imagem de rosto -->
</div>
<div class="dialog-text carol">
Morning, dear. You know, this room could use a quick touch-up. Would you mind straightening things up a bit? Just the cushions and magazines mainly. It makes the whole place feel fresher, don't you think? I'd do it, but I was just getting lost in thought here...
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Of course, Aunt Carol. Happy to help make the place feel nice. I'll get right on it.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<!-- GIF/Vídeo de alguém arrumando almofadas ou revistas -->
<img src="img/etc/chores/tidying_livingroom.webp" alt="Tidying up the living room">
</div>
<p class="spy-narrative">
She gives you a warm, appreciative smile. Okay, just a quick tidy. What's the most logical first step to make the room look better quickly?
</p>
</div>
<div class="game-challenge" id="livingroomchores-quiz">
<h3>Quick Tidy Strategy</h3>
<p>What should you focus on first to make the living room look neater fast?</p>
<div class="answer-options">
<<button "Straighten cushions & stack magazines">>
<<replace "#livingroomchores-quiz">>
<p class="correct-answer">Good thinking. Clearing the main surfaces and straightening the sofa makes an immediate difference. Easy peasy.</p>
<<set $missions["004"].status to 1>>
<<set $player.energy -= 8>>
<<set $auntCarol.love += $missions["004"].stats.love>>
<<set $player.money += $missions["004"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->LivingRoomInteraction]]
</div>
<</replace>>
<</button>>
<<button "Start dusting the lampshades">>
<<replace "#livingroomchores-quiz">>
<p class="wrong-answer">"Oh, ambitious! Dusting is great, but let's handle the clutter first, okay?" Aunt Carol suggests gently. You backtrack and tackle the cushions and magazines instead.</p>
<<set $missions["004"].status to 1>>
<<set $player.energy -= 8>>
<<set $auntCarol.love -= 2>>
<<set $player.money += $missions["004"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->LivingRoomInteraction]]
</div>
<</replace>>
<</button>>
<<button "Check behind the sofa for lost items">>
<<replace "#livingroomchores-quiz">>
<p class="wrong-answer">"Playing detective, are we?" She chuckles. "Just focus on the visible stuff for now, honey. No need for a deep clean." You nod, slightly embarrassed, and start with the cushions.</p>
<<set $missions["004"].status to 1>>
<<set $player.energy -= 8>>
<<set $auntCarol.love -= 2>>
<<set $player.money += $missions["004"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->LivingRoomInteraction]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Pack Your Bags
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_packing.jpeg" alt="Bedroom with Open Suitcase">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
It's Sunday evening, and your weekend with Aunt Carol is coming to an end. Time to pack your things and get ready to head back home. You lay your suitcase open on the bed and start gathering your belongings. Better make sure you don't forget anything important.
</p>
</div>
<!-- Container principal para o minigame -->
<div class="game-challenge" style="background-color: rgba(41,41,41,0.8); border-radius: 8px; padding: 20px; margin-top: 20px;">
<div id="packing-content">
<!-- Conteúdo será carregado via JavaScript quando o DOM estiver pronto -->
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem estática da piscina precisando de limpeza -->
<img src="img/layout/pool/pool_dirty_small.webp" alt="Pool needs cleaning">
</div>
<p class="spy-narrative">
The sun beats down on the pool area. While the water looks inviting, a layer of leaves and debris floats on the surface, spoiling the perfect blue. Aunt Carol is lounging nearby, sunglasses on, looking relaxed.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face_relaxed.png" alt="Carol Relaxed Face">
</div>
<div class="dialog-text carol">
Ah, perfect timing, sweetheart. Could you be a dear and skim the pool for me? It's gotten a bit messy, and frankly, I'm too comfortable to move right now. There might be a little something extra in it for you...
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Sure thing, Aunt Carol. Anything to help out. Where do you keep the cleaning stuff for the pool?
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video autoplay loop muted playsinline src="img/etc/chores/pool_skimming_start.webm" style="pointer-events: none;" alt="Starting Pool Cleaning"></video>
</div>
<p class="spy-narrative">
Aunt Carol points towards the pool shed. Time to find the right tool for the job before she gets impatient... or decides to "help" in her own way.
</p>
</div>
<div class="game-challenge" id="poolchores-quiz">
<h3>Grab the Cleaning Tool</h3>
<p>Which tool is needed to skim the leaves off the pool surface?</p>
<div class="answer-options">
<<button "Pool Skimmer Net">>
<<replace "#poolchores-quiz">>
<p class="correct-answer">This looks like the right tool. Time to get this pool sparkling clean!</p>
<<set $missions["003"].status to 1>>
<<set $player.energy -= 10>>
<<set $auntCarol.love += $missions["003"].stats.love>>
<<set $player.money += $missions["003"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->PoolsideRelaxation]]
</div>
<</replace>>
<</button>>
<<button "Garden Hose">>
<<replace "#poolchores-quiz">>
<p class="wrong-answer">"Trying to spray the leaves away, honey? Cute, but not quite effective." Aunt Carol chuckles from her chair, then nods toward the shed. "The skimmer's behind the door." You grab it and get to work.</p>
<<set $missions["003"].status to 1>>
<<set $player.energy -= 10>>
<<set $auntCarol.love -= 2>>
<<set $player.money += $missions["003"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->PoolsideRelaxation]]
</div>
<</replace>>
<</button>>
<<button "Broom">>
<<replace "#poolchores-quiz">>
<p class="wrong-answer">"That's for the patio, silly. Unless you're planning on sweeping the water?" She gives you a teasing look, then points to the shed. "Skimmer. Behind the door." You sheepishly trade tools.</p>
<<set $missions["003"].status to 1>>
<<set $player.energy -= 10>>
<<set $auntCarol.love -= 2>>
<<set $player.money += $missions["003"].stats.money>>
<<set $time += 1>>
<div class="menu-buttons">
[[Continue->PoolsideRelaxation]]
</div>
<</replace>>
<</button>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<!-- Imagem do quarto da Carol, talvez ela perto do guarda-roupa -->
<img src="img/layout/bedroom_carol/bedroom_carol_wardrobe.webp" alt="Carol's Bedroom with Wardrobe">
</div>
<p class="spy-narrative">
You enter Carol's bedroom again. This time, she's standing by her large wardrobe, door slightly ajar, tapping her chin thoughtfully.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<!-- Usar a face pensativa ou uma nova face "indecisa" -->
<img src="img/chars/carol/face/carol_face_thinking.jpg" alt="Carol Thinking Face">
</div>
<div class="dialog-text carol">
Oh, perfect timing! I was just trying to organize this wardrobe a bit... things get so jumbled up. Could you perhaps reach that box on the top shelf for me? Or maybe just see if you can find that blue scarf I love? I swear it vanished in here.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Sure, Aunt Carol. Let me take a look inside. I'm pretty good at finding lost things.
</div>
</div>
<p class="spy-narrative">
She steps aside, giving you access to the wardrobe. It smells faintly of her perfume and cedar wood. As you rummage through neatly folded clothes and hanging dresses, your hand brushes against a softer box tucked away in the back, behind some sweaters... Intrigued, you pull it out slightly.
</p>
<!-- ===== Carrossel HTML (Adaptado para WardrobeHelp) ===== -->
<div id="carousel" class="carousel">
<!-- Item 1: Brinquedo Erótico 1 -->
<img src="img/etc/toys/toy_1.jpg" class="carousel-img active" alt="A smooth, curved personal massager">
<!-- Item 2: Brinquedo Erótico 2 -->
<img src="img/etc/toys/toy_2.webp" class="carousel-img" alt="A small, discreet bullet vibrator">
<!-- Item 3: Polaroid 4 -->
<img src="img/chars/carol/polaroids/carol_polaroid_4.jpeg" class="carousel-img" alt="Carol Polaroid 4 - Lounging suggestively">
</div>
<!-- Controles do Carrossel (Usando as funções JS globais) -->
<div class="carousel-controls">
<<link "◀ Previous">>
<<run window.carouselPrevious()>>
<</link>>
<<link "Next ▶">>
<<run window.carouselNext()>>
<</link>>
</div>
<!-- ===== Fim do Carrossel HTML ===== -->
<p class="spy-narrative">
Well, this definitely isn't a scarf. Your eyes widen as you cycle through the contents of the box. It seems Aunt Carol has some secrets hidden away. A hot flush creeps up your neck as you quickly put the box back where you found it, pretending you didn't see anything.
</p>
<!-- Seção para completar a missão -->
<div id="completion-section" style="text-align: center; margin-top: 25px;">
<!-- Link do SugarCube para iniciar a conclusão -->
<div class="menu-buttons">
<<link "Finish 'Helping' with the Wardrobe">>
<!-- Código DENTRO do link -->
<<replace "#completion-section">>
<p class="spy-narrative" style="margin-bottom: 15px;">You manage to find the blue scarf (it was snagged on a hanger) and hand it to her, keeping your expression neutral.</p>
<div class="dialog-container">
<div class="dialog-image">
<!-- Usar face sorrindo ou agradecida -->
<img src="img/chars/carol/face/carol_face_smiling.jpg" alt="Carol Smiling Face">
</div>
<div class="dialog-text carol">
There it is! Oh, thank you, sweetheart! I knew you'd find it. You have a knack for things like that. Come on, let's get out of this room for now.
</div>
</div>
<!-- Atualiza o estado do jogo AQUI -->
<<set $missions["006"].status to 1>>
<<set $player.energy to $player.energy - 7>> /* Custo de energia */
<<set $auntCarol.love to $auntCarol.love + 15>> /* Recompensa de amor */
<<set $auntCarol.corruption to $auntCarol.corruption + 10>> /* Recompensa de corrupção */
<<set $time to $time + 1>> /* Avanço do tempo */
<!-- Botão SugarCube para sair -->
<div class="menu-buttons" style="margin-top: 15px;">
[[Continue->WardrobeHelpScene]]
</div>
<</replace>>
<</link>>
</div>
</div>
</div><div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/livingroom/livingroom_small.jpg" alt="Living Room">
</div>
<p class="environment-text">
Stepping inside, the familiar scent of Aunt Carol's home fills the air. The living room is cozy, just as I remember it.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<div class="dialog-text carol">
I hope you're hungry, dear. I made your favorite dish for dinner.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
That sounds amazing. It’s been too long since I had a homemade meal.
</div>
</div>
<p class="spy-narrative">
But before heading inside, I need to grab my bag from the porch. There are a few suitcases here... which one is mine?
</p>
<div class="game-challenge">
<h3>Pick Your Bag</h3>
<p>Choose the correct bag to continue.</p>
<div class="answer-options">
<<button "Red Suitcase">>
<<replace "#challenge-response">>
<p id="challenge-response" class="wrong-answer">This isn't mine... it feels way too heavy.</p>
<</replace>>
<</button>>
<<button "Blue Backpack">>
<<replace "#challenge-response">>
<p id="challenge-response" class="correct-answer">Yes! This is my bag. Time to head inside.</p>
<<set $missions["001"].status to 1>>
<<set $player.love to $player.love + 5>>
<div class="menu-buttons">
[[Continue->FridaySettlingIn]]
<<set $time to $time + 1>>
</div>
<</replace>>
<</button>>
<<button "Black Duffel Bag">>
<<replace "#challenge-response">>
<p id="challenge-response" class="wrong-answer">This isn't mine... where did I put it?</p>
<</replace>>
<</button>>
</div>
<div id="challenge-response"></div>
</div>
</div><div id="characters-screen-container">
<<if not Dialog.isOpen()>>
<div class="character-screen-header">
<h1>Character Guide</h1>
<<link "← Back to Game">>
<<goto `previous() || "Bedroom"`>>
<</link>>
</div>
<</if>>
<div id="character-list"></div>
</div>
<<script>>
$(document).one(':passagedisplay', function() {
if (window.characterScreen && typeof window.characterScreen.renderGuide === 'function') {
window.characterScreen.renderGuide('#character-list');
}
});
<</script>><div class="game-container credits-container">
<div class="credits-header">
<div class="credits-logo-wrap">
<img src="img/utils/logo/CK.png" alt="ChromaK Logo" class="credits-logo">
</div>
<h1 class="credits-main-title">A Weekend with Aunt Carol</h1>
<div class="credits-creator-tag">Created by <strong>ChromaK (CK)</strong></div>
</div>
<div class="credits-card credits-ecosystem-card">
<h3 class="credits-card-title">The ChromaK Creator Ecosystem</h3>
<p class="credits-narrative">
Thank you for playing <strong>A Weekend with Aunt Carol</strong>! Your interest, playtime, and feedback directly drive the evolution of this game and every project in our creative universe.
</p>
<p class="credits-narrative">
Becoming a Patron isn't just about getting perks in this game—it's about being part of an entire ecosystem I'm building. Your support empowers the creation of new narrative visual novels, detailed sandbox simulations, original adult interactive stories, and frequent content expansions.
</p>
<div class="credits-patreon-box">
<a href="https://www.patreon.com/c/ChromaK" target="_blank" rel="noopener noreferrer" class="credits-patreon-cta">
❤️ Join & Support on Patreon: patreon.com/c/ChromaK
</a>
</div>
</div>
<div class="credits-projects-grid">
<div class="credits-project-card">
<div class="credits-project-badge">Featured Sister Game</div>
<h4 class="credits-project-title">🎮 Narrator of Life</h4>
<p class="credits-project-desc">
We are a hub for playable, interactive NSFW stories. Experience an ambitious narrative adult RPG featuring rich character stories, life simulation, branch-heavy choices, and sandbox progression.
</p>
<a href="https://narrator-of-life-public-release.pages.dev/" target="_blank" rel="noopener noreferrer" class="credits-project-btn">
Play Narrator of Life ➜
</a>
</div>
<div class="credits-project-card">
<div class="credits-project-badge">NSFW Captions & Stories</div>
<h4 class="credits-project-title">🔥 CK Captions</h4>
<p class="credits-project-desc">
Explore our dedicated collection of high-quality NSFW captions, erotic visual vignettes, and intimate character stories.
</p>
<a href="https://ckcaptions.com" target="_blank" rel="noopener noreferrer" class="credits-project-btn">
Visit CKCaptions.com ➜
</a>
</div>
</div>
<div class="credits-tech-card">
<p class="credits-tech-info">Built with <strong>Twine 2</strong> and <strong>SugarCube 2.37.3</strong> · Compiled with <strong>Tweego CLI</strong></p>
<p class="credits-disclaimer">All characters depicted in this game and associated works are 18 years of age or older.</p>
</div>
<div class="menu-buttons" style="margin-top: var(--sp-6);">
[[Return to the Main Menu->Start]]
</div>
</div><div class="game-container end-content-container">
<div class="end-content-logo">
<!-- ATENÇÃO: O caminho local C:\Users\... não funcionará em um jogo web.
Você precisa colocar a logo na pasta 'img' do seu projeto e usar um caminho relativo.
Exemplo: img/utils/logo/CK.png -->
<img src="img/utils/logo/CK.png" alt="ChromaK Logo">
</div>
<h2 class="end-content-title">The Weekend Is Over... Or Is It?</h2>
<p class="end-content-text">
And so concludes the initial three days of "A Weekend With Aunt Carol" (Version 0.5)!
You've navigated charged moments, completed tasks, and perhaps... gotten much closer to your alluring Aunt than you ever anticipated.
</p>
<p class="end-content-text">
But as many of you have astutely noticed and passionately requested, <strong>this story is far from over!</strong> Thanks to the incredible feedback and the unexpected turn of events in our protagonist's life, his stay with Aunt Carol is about to be extended.
</p>
<p class="end-content-text">
What does this mean? <strong>More. Much more.</strong> We're planning to:
<ul>
<li><span class="emoji">🗺️</span> Expand the explorable map of Carol's city.</li>
<li><span class="emoji">💬</span> Introduce new characters with their own stories and... *desires*.</li>
<li><span class="emoji">💖</span> Deepen the interactions and relationship paths with Aunt Carol, Angela, and Skylar.</li>
<li><span class="emoji">🔥</span> Add many more steamy scenes, tantalizing missions, and unexpected twists.</li>
<li><span class="emoji">💻</span> Implement new gameplay mechanics like using the phone and laptop.</li>
</ul>
</p>
<p class="end-content-text">
The goal is to transform this weekend into a truly unforgettable (and likely very indecent) extended stay!
</p>
<div class="patreon-cta-container">
<h3 class="patreon-cta-title">Want to Shape the Future of "A Weekend With Aunt Carol"?</h3>
<p class="end-content-text" style="color: #e0e0e0; margin-bottom: 15px;">
Your support makes this continued development possible! By joining my Patreon, you not only help keep the lewd adventures coming but also get to:
</p>
<ul style="text-align: left; max-width: 450px; margin: 0 auto 20px auto;">
<li><span class="emoji">🗳️</span> Vote on future content, character development, and even new game mechanics.</li>
<li><span class="emoji">🤫</span> Get exclusive sneak peeks and behind-the-scenes updates.</li>
<li><span class="emoji">✨</span> Higher tiers get early access to new versions and other special perks!</li>
</ul>
<p class="end-content-text" style="color: #e0e0e0;">
Every bit of support, no matter the tier, helps immensely and allows me to dedicate more time to making this game everything we want it to be (and more!).
</p>
<a href="https://www.patreon.com/c/ChromaK" class="patreon-link" target="_blank">Support ChromaK on Patreon!</a>
</div>
<p class="end-content-final-message">
Thank you for playing, and get ready for a whole lot more heat! The next update is already in the works. <br>Stay tuned, and stay naughty!
</p>
<!-- Opcional: Botão para voltar ao menu principal ou fechar (se for o fim absoluto do build atual) -->
<div class="menu-buttons" style="margin-top: 30px;">
[[Return to Main Menu->Start]]
</div>
</div><<if $keyEvents.linearWeekendActive>>
/* During the linear weekend the player has dedicated sleep passages with
full dream sequences (FridayNightSleep / SaturdayNightSleep /
SundayNightSleep). This redirect protects against the midnight time-
observer in _script.twee firing SleepSequence directly during the arc. */
<<if $actualDay is "Friday">><<goto "FridayNightSleep">>
<<elseif $actualDay is "Saturday">><<goto "SaturdayNightSleep">>
<<elseif $actualDay is "Sunday">><<goto "SundayNightSleep">>
<</if>>
<</if>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/bedroom/bedroom_night.jpg" alt="Guest Bedroom at Night">
</div>
<p class="spy-narrative">
Deciding to call it a night, you change into something comfortable and slip under the covers. The bed is soft, and exhaustion quickly claims you. The sounds of the house fade away as you drift off...
</p>
</div>
<<silently>>
<<set _dreamText to "">>
<<set _dreamLustBonus to 0>>
<<set _hasDream to false>>
<<set _dreamHTML to "">>
<<set _nextDayHTML to "">>
<<if not $keyEvents.openWorldCarolCity>>
<<set _currentDay to $actualDay>>
<<if _currentDay is "Friday">>
<<set _dreamText to "You dream of Aunt Carol... but younger somehow, vibrant. She's in the living room, wearing a short skirt, dancing playfully just for you, a flirtatious smile on her lips. It feels innocent, yet charged with potential...">>
<<set _dreamLustBonus to 5>>
<<set _dreamHTML to '<video class="dream-media" autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_dance_flirt.webm" style="pointer-events: none;" alt="Dream Sequence - Dance Flirt"></video>'>>
<<set _hasDream to true>>
<<set $actualDay to "Saturday">>
<<set $time to 7>>
<<set $player.energy to 100>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, gift: 0 } >>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set _nextDayHTML to '<p class="wake-up-text">You wake up feeling refreshed, the morning sun filtering through the window. It\'s ' + $actualDay + ', 7:00 AM.</p><div class="menu-buttons" style="margin-top: 20px;">[[Start the new day->SaturdayWakeNarrative]]</div>'>>
<<elseif _currentDay is "Saturday">>
<<set _dreamText to "The dream shifts. You're lying down, looking up at Aunt Carol. She's leaning over you, her breasts full and bare, swaying gently. Her voice is a husky whisper, instructing you, guiding you... a torrent of pleasure builds until you finally release with a jolt. You wake up slightly sticky...">>
<<set _dreamLustBonus to 15>>
<<set _dreamHTML to '<video class="dream-media" autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_joi.webm" style="pointer-events: none;" alt="Dream Sequence"></video>'>>
<<set _hasDream to true>>
<<set $actualDay to "Sunday">>
<<set $time to 7>>
<<set $player.energy to 100>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, gift: 0 } >>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set _nextDayHTML to '<div class="menu-buttons" style="margin-top: 20px;">[[You stir in your sleep...->SundayWakeNarrative]]</div>'>>
<<elseif _currentDay is "Sunday">>
<<set _dreamText to "It's a strange, unsettling dream. Aunt Carol is lounging outdoors, wearing lingerie, but her belly is impossibly round and swollen, pregnant. She strokes her stomach proudly, her gaze heavy and possessive as she looks at you. It's bizarre, maternal, yet deeply erotic in a way that disturbs you...">>
<<set _dreamLustBonus to 10>>
<<set _dreamHTML to '<video class="dream-media" autoplay loop muted playsinline src="img/chars/carol/dreams/alexapearl_pregnant.webm" style="pointer-events: none;" alt="Dream Sequence"></video>'>>
<<set _hasDream to true>>
<<set $actualDay to "Monday">>
<<set $time to 8>>
<<set $player.energy to 100>>
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, gift: 0 } >>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, gift: 0 } >>
<<set _nextDayHTML to '<div class="menu-buttons" style="margin-top: 20px;">[[You begin to wake up on a new day...->CarolExplainsCityLife]]</div>'>>
<</if>>
<<set $dayNumber += 1>>
<<else>>
<<set _openWorldDreams to [
{ text: "You dream of Aunt Carol... She slips into your room in the dead of night, her silk robe parted as she whispers your name, warm breath tickling your neck. You wake up with a lingering heat between your sheets. (+5 Lust)", lust: 5 },
{ text: "Your mind drifts to Angela's sun-drenched garden. She's on her knees trimming roses, her sundress falling loose as she glances over her shoulder with an unmistakably inviting smile. (+5 Lust)", lust: 5 },
{ text: "You dream of the local store after closing. Skylar leans across the counter, neon streetlights reflecting in her eyes as she reaches out and pulls you closer by your collar. (+5 Lust)", lust: 5 },
{ text: "A hazy, sensual dream takes hold: Valerie moves through an intricate yoga flow in soft candlelight, her skin glowing with light sweat as her eyes lock onto yours with intense spiritual intimacy. (+5 Lust)", lust: 5 },
{ text: "You dream of Jenna catching her breath after a hard workout, leaning against you in the quiet studio, her heart beating fast against your chest as she guides your hands. (+5 Lust)", lust: 5 },
{ text: "Vibrant neon lights and muffled city music echo through your dreams. The alluring faces and whispered promises of the women you've met blur into a vivid, restless fantasy. (+5 Lust)", lust: 5 }
]>>
<<set _chosenDream to _openWorldDreams[random(0, _openWorldDreams.length - 1)]>>
<<set _dreamText to _chosenDream.text>>
<<set _dreamLustBonus to _chosenDream.lust>>
<<set $player.lust to Math.min(100, $player.lust + _dreamLustBonus)>>
<<set _hasDream to false>>
<<set $dayNumber += 1>>
<<set _daysOfWeek to ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]>>
<<set _currentDayIndex to _daysOfWeek.indexOf($actualDay)>>
<<set _nextDayIndex to (_currentDayIndex + 1) % 7>>
<<set $actualDay to _daysOfWeek[_nextDayIndex]>>
<<set $time to 7>>
<<set $player.energy to 100>>
<<for _activity, _details range $dailyActivities>>
<<set _details.count to 0>>
<</for>>
/* Main characters' daily interactions + replay counters */
<<set $auntCarol.dailyInteractions to { talk: 0, flirt: 0, approach: 0, gift: 0 } >>
<<set $auntCarol.dailyReplayCount to 0>>
<<set $neighborAngela.dailyInteractions to { talk: 0, compliment: 0, approach: 0, gift: 0 } >>
<<set $neighborAngela.dailyReplayCount to 0>>
<<set $storeSkylar.dailyInteractions to { talk: 0, flirt: 0, approach: 0, gift: 0 } >>
<<set $storeSkylar.dailyReplayCount to 0>>
<<for _girlName, _girlData range $openWorldGirls>>
<<if _girlData.dailyInteractions>>
<<for _interactionName, _count range _girlData.dailyInteractions>>
<<set _girlData.dailyInteractions[_interactionName] to 0>>
<</for>>
<</if>>
<<if _girlData.dailyReplayCount isnot undefined>>
<<set _girlData.dailyReplayCount to 0>>
<</if>>
<</for>>
/* Random-encounter characters (Tiffany, Paige, Fiona, Carmen) */
<<if def $randomEncounters>>
<<for _rk, _rd range $randomEncounters>>
<<if _rd.dailyInteractions>>
<<for _interactionName, _count range _rd.dailyInteractions>>
<<set _rd.dailyInteractions[_interactionName] to 0>>
<</for>>
<</if>>
<<if _rd.dailyReplayCount isnot undefined>>
<<set _rd.dailyReplayCount to 0>>
<</if>>
<</for>>
<</if>>
<<if def $locationStaff>>
<<for _sk, _sd range $locationStaff>>
<<if _sd.dailyInteractions>>
<<for _interactionName, _count range _sd.dailyInteractions>>
<<set _sd.dailyInteractions[_interactionName] to 0>>
<</for>>
<</if>>
<</for>>
<</if>>
<<set _nextDayHTML to '<p class="wake-up-text">You wake up feeling refreshed, the morning sun filtering through the window. It\'s ' + $actualDay + ', 7:00 AM.</p><div class="menu-buttons" style="margin-top: 20px;">[[Start the new day->Bedroom]]</div>'>>
<</if>>
<</silently>>
<div class="dream-container">
<<if _hasDream>>
<p class="dream-intro-text">...and fall into a restless sleep...</p>
<div class="dream-media-container">
<<= _dreamHTML >>
</div>
<p class="dream-description-text"><<= _dreamText >></p>
<<if _dreamLustBonus > 0>>
<<set $player.lust += _dreamLustBonus >>
<</if>>
<<else>>
<p class="dream-description-text" style="text-align: center; margin-top: 15px;"><<= _dreamText >></p>
<</if>>
</div>
<<= _nextDayHTML>>
</div>
<<unset _currentDay, _dreamText, _dreamLustBonus, _hasDream, _dreamHTML, _nextDayHTML, _daysOfWeek, _currentDayIndex, _nextDayIndex>><div class="stats">
<!-- Time / Day / Period — diegetic, always visible. -->
<div class="game-stats">
<div class="time-display">$time:00</div>
<div class="day-display">$actualDay</div>
<<if $time >= 6 && $time <= 10>>
<div class="period-indicator period-morning"><<print $period.morning.label>></div>
<<elseif $time >= 11 && $time <= 13>>
<div class="period-indicator period-noon"><<print $period.noon.label>></div>
<<elseif $time >= 14 && $time <= 17>>
<div class="period-indicator period-afternoon"><<print $period.afternoon.label>></div>
<<elseif $time >= 18 && $time <= 21>>
<div class="period-indicator period-evening"><<print $period.evening.label>></div>
<<else>>
<div class="period-indicator period-night"><<print $period.night.label>></div>
<</if>>
</div>
<!-- Cheat / Supporter Button (styled like View Characters) -->
<div class="sidebar-button-container" style="margin-top: var(--sp-3); margin-bottom: var(--sp-2);">
<<link "Cheat">><<run window.openCheatModal()>><</link>>
</div>
<!-- During the linear weekend the sidebar is purely diegetic: time, day,
and period only. No advance-time button, no player numerics, no
quest tracker, no relationship hearts, no failure counter. The world
opens up after CarolExplainsCityLife. -->
<<if not $keyEvents.linearWeekendActive>>
<div class="advance-time-button-container">
<<link "<span class='emoji'>⏰</span> Advance 1 Hour" `passage()`>>
<<run window.AWAC.advanceTime(1)>>
<<set $player.energy to Math.max(0, $player.energy - 2)>>
<</link>>
</div>
<div class="player-stats">
<h3>Player Stats</h3>
<div class="stat-row">
<span class="stat-label">⚡ Energy: <<= $player.energy>>%</span>
</div>
<div class="stat-row">
<span class="stat-label">💰 Money: $<<= $player.money>></span>
</div>
<div class="stat-row">
<span class="stat-label">❤️ Lust: <<= $player.lust>>%</span>
</div>
<div class="stat-row">
<span class="stat-label">🎭 Charisma: <<= $player.charisma>>%</span>
</div>
<div class="stat-row">
<span class="stat-label">🧠 Intelligence: <<= $player.intelligence>>%</span>
</div>
<div class="stat-row">
<span class="stat-label">💪 Strength: <<= $player.strength>>%</span>
</div>
</div>
<div class="characters-section">
<h3>Characters</h3>
<div class="sidebar-button-container">
<<link "View Characters">><<run window.openCharacterGuide()>><</link>>
</div>
</div>
<</if>>
</div>/* Developer hub: jump into passages in a running game.
Open from the title screen: "Review Passages (Dev)".
Filters: character + type (both at top, horizontal rows). */
<<silently>>
<<set $keyEvents.linearWeekendActive to false>>
<<if ndef $actualDay>><<set $actualDay to "Monday">><</if>>
<<if ndef $time>><<set $time to 14>><</if>>
<<if $player.energy lt 50>><<set $player.energy to 100>><</if>>
<<if ndef $devReviewChar>><<set $devReviewChar to "all">><</if>>
<<if ndef $devReviewKind>><<set $devReviewKind to "all">><</if>>
<<if def $openWorldGirls and def $openWorldGirls.valerie>>
<<if $openWorldGirls.valerie.love lt 20>><<set $openWorldGirls.valerie.love to 40>><</if>>
<<if $openWorldGirls.valerie.lust lt 20>><<set $openWorldGirls.valerie.lust to 40>><</if>>
<</if>>
<</silently>>
<div class="game-container">
<h2 class="hub-title">Passage Review (Dev)</h2>
<p class="spy-narrative">
Click a passage to load it <strong>inside the running game</strong> — real UI, images, videos, and minigames.
Prerequisites are auto-set so gates do not block you.
</p>
<div class="dev-filter-bar">
<p class="spy-narrative dev-filter-label">
<strong>Character</strong> · <<= $devReviewChar>> · <strong>Type</strong> · <<= $devReviewKind>>
</p>
<div class="dev-filter-row">
<<link "All">>
<<set $devReviewChar to "all">>
<<goto "DevPassageReview">>
<</link>>
<<link "Valerie">>
<<set $devReviewChar to "valerie">>
<<goto "DevPassageReview">>
<</link>>
<<link "Kenzie">>
<<set $devReviewChar to "kenzie">>
<<goto "DevPassageReview">>
<</link>>
<<link "Jenna">>
<<set $devReviewChar to "jenna">>
<<goto "DevPassageReview">>
<</link>>
<<link "Brandi">>
<<set $devReviewChar to "brandi">>
<<goto "DevPassageReview">>
<</link>>
<<link "Skylar">>
<<set $devReviewChar to "skylar">>
<<goto "DevPassageReview">>
<</link>>
<<link "Angela">>
<<set $devReviewChar to "angela">>
<<goto "DevPassageReview">>
<</link>>
<<link "Carol / core">>
<<set $devReviewChar to "core">>
<<goto "DevPassageReview">>
<</link>>
<<link "Roxy">>
<<set $devReviewChar to "roxy">>
<<goto "DevPassageReview">>
<</link>>
<<link "Paige">>
<<set $devReviewChar to "paige">>
<<goto "DevPassageReview">>
<</link>>
<<link "Fiona">>
<<set $devReviewChar to "fiona">>
<<goto "DevPassageReview">>
<</link>>
<<link "Carmen">>
<<set $devReviewChar to "carmen">>
<<goto "DevPassageReview">>
<</link>>
<<link "Staff">>
<<set $devReviewChar to "staff">>
<<goto "DevPassageReview">>
<</link>>
</div>
<div class="dev-filter-row">
<<link "All types">>
<<set $devReviewKind to "all">>
<<goto "DevPassageReview">>
<</link>>
<<link "Missions">>
<<set $devReviewKind to "mission">>
<<goto "DevPassageReview">>
<</link>>
<<link "Scenes">>
<<set $devReviewKind to "scene">>
<<goto "DevPassageReview">>
<</link>>
<<link "Replays">>
<<set $devReviewKind to "replay">>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep only">>
<<set $devReviewKind to "prep">>
<<goto "DevPassageReview">>
<</link>>
</div>
</div>
/* ===== VALERIE ===== */
<<if $devReviewChar is "all" or $devReviewChar is "valerie">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Valerie Phase 2 — Prep</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Prep: sandbox + all Valerie Phase 1 complete">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Monday">>
<<set $time to 14>>
<<set $player.energy to 100>>
<<if def $missions>>
<<for _k, _m range $missions>>
<<if _m.character is "valerie" and _m.passage and ["ValerieFixGarden","ValerieMoveCanvas","ValerieFindCrystal","ValerieHouseCleansing"].includes(_m.passage)>>
<<set $missions[_k].status to 1>>
<</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k, _s range $scenes>>
<<if _s.character is "valerie" and _s.passage and ["ValerieTowelEncounter","ValerieYogaSessionGlimpse","ValeriePoolsideThanks","ValerieEnergyReleaseHJ","ValerieChakraCheckupHJ","ValerieDeeperAlignmentTJ_HJ","ValeriePrimalEnergyBJ"].includes(_s.passage)>>
<<set $scenes[_k].status to 1>>
<</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Valerie Phase 2 statuses only (replay from VM005)">>
<<if def $missions>>
<<for _k, _m range $missions>>
<<if ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012","VM013"].includes(_k)>>
<<set $missions[_k].status to 0>>
<</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<set $scenes["VS008"].status to 0>>
<<set $scenes["VS009"].status to 0>>
<<set $scenes["VS012"].status to 0>>
<</if>>
<<set $keyEvents.valerieSacredUnion to false>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Valerie Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "VM005 · Clear the Living Room">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "LivingRoomValerie", scenesDone: ["VS007"], missionsDone: [], play: "ValerieHouseFlow" })>>
<</link>>
<<link "VM006 · Help in the Kitchen">>
<<run window.devReviewJump({ day: "Monday", time: 15, location: "KitchenValerie", scenesDone: ["VS007"], missionsDone: ["VM005"], play: "ValerieKitchenHeat" })>>
<</link>>
<<link "VM007 · Help Set Up Her Bedroom">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "BedroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006"], play: "ValerieThreshold" })>>
<</link>>
<<link "VM008 · Help Her Choose an Outfit">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "BedroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007"], play: "ValerieColorRitual" })>>
<</link>>
<<link "VM009 · An Honest Look">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "LivingRoomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008"], play: "ValerieRawFrequency" })>>
<</link>>
<<link "VM010 · Something Left in the Bathroom">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009"], play: "ValeriePrivateTools" })>>
<</link>>
<<link "VM011 · Poolside Afternoon">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "PoolValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010"], play: "ValerieWaterOffering" })>>
<</link>>
<<link "VM012 · Steam in the Hall → shower">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011"], play: "ValerieSteamInvitation" })>>
<</link>>
<<link "VM013 · Evening on the Mat → sacred union">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "BedroomValerie", scenesDone: ["VS007","VS008"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012"], play: "ValerieAlignmentEvening" })>>
<</link>>
</div>
<h3>Valerie — Room hubs</h3>
<div class="menu-buttons">
<<link "Living Room">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "LivingRoomValerie", scenesDone: ["VS007"], missionsDone: [], play: "LivingRoomValerie" })>>
<</link>>
<<link "Kitchen">>
<<run window.devReviewJump({ day: "Monday", time: 15, location: "KitchenValerie", scenesDone: ["VS007"], missionsDone: ["VM005"], play: "KitchenValerie" })>>
<</link>>
<<link "Bathroom">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011"], play: "BathroomValerie" })>>
<</link>>
<<link "Pool">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "PoolValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010"], play: "PoolValerie" })>>
<</link>>
<<link "Bedroom">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "BedroomValerie", scenesDone: ["VS007","VS008"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012"], play: "BedroomValerie" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Valerie Phase 2 — Scenes</h3>
<p class="spy-narrative">
Path note: <strong>VS009</strong> is a side branch. Main climax: <strong>VM012 → VS008</strong>, later <strong>VM013 → VS012</strong>.
</p>
<div class="menu-buttons">
<<link "VS008 · Shower Spy">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012"], play: "ValerieShowerSpy" })>>
<</link>>
<<link "VS009 · Caught in the Bathroom">>
<<run window.devReviewJump({ day: "Monday", time: 22, location: "BathroomValerie", scenesDone: ["VS007"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010"], play: "ValeriePrivateFrequency" })>>
<</link>>
<<link "VS012 · Sacred Union">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomValerie", scenesDone: ["VS007","VS008"], missionsDone: ["VM005","VM006","VM007","VM008","VM009","VM010","VM011","VM012","VM013"], play: "ValerieSacredUnion" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Valerie Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Shower Spy">>
<<run window.devReviewJump({ day: "Thursday", time: 10, location: "BathroomValerie", scenesDone: ["VS007","VS008"], missionsDone: ["VM012"], play: "ReplayValerieShowerSpy" })>>
<</link>>
<<link "Replay · Private Frequency">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "BathroomValerie", scenesDone: ["VS007","VS009"], missionsDone: ["VM010"], play: "ReplayValeriePrivateFrequency" })>>
<</link>>
<<link "Replay · Sacred Union">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomValerie", scenesDone: ["VS007","VS008","VS012"], missionsDone: ["VM013"], play: "ReplayValerieSacredUnion" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== KENZIE ===== */
<<if $devReviewChar is "all" or $devReviewChar is "kenzie">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Kenzie Phase 2 — Prep</h3>
<div class="menu-buttons">
<<link "Prep: sandbox + Kenzie Phase 1 complete (through KS004)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Monday">>
<<set $time to 14>>
<<set $player.energy to 100>>
<<if def $openWorldGirls and def $openWorldGirls.kenzie>>
<<set $openWorldGirls.kenzie.love to 30>>
<<set $openWorldGirls.kenzie.lust to 40>>
<<set $openWorldGirls.kenzie.corruption to 25>>
<<set $openWorldGirls.kenzie.debt to 0>>
<</if>>
<<if def $scenes>>
<<set $scenes["KS001"].status to 1>>
<<set $scenes["KS002"].status to 1>>
<<set $scenes["KS003"].status to 1>>
<<set $scenes["KS004"].status to 1>>
<</if>>
<<if def $missions>>
<<set $missions["KM001"].status to 1>>
<<set $missions["KM002"].status to 1>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Kenzie Phase 2 statuses only">>
<<if def $missions>>
<<for _k, _m range $missions>>
<<if ["KM003","KM004","KM005","KM006","KM007","KM008","KM009","KM010","KM011","KM012","KM013","KM014","KM015","KM016"].includes(_k)>>
<<set $missions[_k].status to 0>>
<</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["KS006","KS008","KS009","KS010","KS011","KS012","KS013","KS016"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 0>><</if>>
<</for>>
<</if>>
<<if def $openWorldGirls and def $openWorldGirls.kenzie>><<set $openWorldGirls.kenzie.debt to 0>><</if>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Kenzie Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "KM003 · Spotter's Privilege">>
<<run window.devReviewJump({ day: "Monday", time: 13, location: "Gym", scenesDone: ["KS001","KS002","KS003","KS004"], missionsDone: ["KM001","KM002"], play: "KenzieSpotterPrivilege" })>>
<</link>>
<<link "KM004 · Booth for Two">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "CoffeeShop", scenesDone: ["KS004"], missionsDone: ["KM003"], play: "KenzieBoothForTwo" })>>
<</link>>
<<link "KM005 · Second Sitting">>
<<run window.devReviewJump({ day: "Tuesday", time: 16, location: "CoffeeShop", scenesDone: ["KS004"], missionsDone: ["KM003","KM004"], play: "KenzieSecondSitting" })>>
<</link>>
<<link "KM006 · Fair Lights">>
<<run window.devReviewJump({ day: "Saturday", time: 17, location: "Mall", scenesDone: ["KS004"], missionsDone: ["KM003","KM004","KM005"], play: "KenzieFairLights" })>>
<</link>>
<<link "KM007 · After Hours → gym sex">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "Gym", scenesDone: ["KS004"], missionsDone: ["KM003"], play: "KenzieAfterHours" })>>
<</link>>
<<link "KM008 · Bailout">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BedroomKenzie", scenesDone: ["KS004"], missionsDone: ["KM003","KM004","KM005","KM006"], play: "KenzieBailout" })>>
<</link>>
<<link "KM009 · Fake Professional">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LivingRoomValerie", scenesDone: ["KS004"], missionsDone: ["KM008"], play: "KenzieFakeProfessional" })>>
<</link>>
<<link "KM010 · Interest Due">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BedroomKenzie", scenesDone: ["KS004"], missionsDone: ["KM009"], play: "KenzieInterestDue" })>>
<</link>>
<<link "KM011 · Visual Tip">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "LivingRoomValerie", scenesDone: ["KS004"], missionsDone: ["KM010"], play: "KenzieVisualTip" })>>
<</link>>
<<link "KM012 · Fridge Raid → kitchen">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "KitchenValerie", scenesDone: ["KS004"], missionsDone: ["KM011"], play: "KenzieFridgeRaid" })>>
<</link>>
<<link "KM013 · Leave the Door → gush">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BedroomKenzie", scenesDone: ["KS004","KS009"], missionsDone: ["KM007"], play: "KenzieLeaveTheDoor" })>>
<</link>>
<<link "KM014 · Collections Call → landlord">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "BedroomKenzie", scenesDone: ["KS004"], missionsDone: ["KM010"], play: "KenzieCollectionsCall" })>>
<</link>>
<<link "KM015 · Pool Tab → pool sex">>
<<run window.devReviewJump({ day: "Saturday", time: 14, location: "PoolValerie", scenesDone: ["KS004","KS011"], missionsDone: ["KM014"], play: "KenziePoolTab" })>>
<</link>>
<<link "KM016 · Cover for Me → couch">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "LivingRoomValerie", scenesDone: ["KS004"], missionsDone: ["KM012"], play: "KenzieCoverForMe" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Kenzie Phase 2 — Scenes</h3>
<div class="menu-buttons">
<<link "KS006 · Kitchen Counter Show">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "KitchenValerie", scenesDone: ["KS004"], missionsDone: ["KM012"], play: "KenzieKitchenTease" })>>
<</link>>
<<link "KS008 · Oiled Couch">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "LivingRoomValerie", scenesDone: ["KS004"], missionsDone: ["KM016"], play: "KenzieOiledCouch" })>>
<</link>>
<<link "KS009 · First Gym Sex">>
<<run window.devReviewJump({ day: "Friday", time: 21, location: "Gym", scenesDone: ["KS004"], missionsDone: ["KM007"], play: "KenzieFirstGymSex" })>>
<</link>>
<<link "KS010 · Home Creampie">>
<<run window.devReviewJump({ day: "Monday", time: 22, location: "BedroomKenzie", scenesDone: ["KS004","KS009"], missionsDone: ["KM013"], play: "KenzieHomeGush" })>>
<</link>>
<<link "KS011 · Collections Payment">>
<<run window.devReviewJump({ day: "Monday", time: 22, location: "BedroomKenzie", scenesDone: ["KS004"], missionsDone: ["KM014"], play: "KenzieLandlordCollect" })>>
<</link>>
<<link "KS012 · Pool Tab Settled">>
<<run window.devReviewJump({ day: "Saturday", time: 14, location: "PoolValerie", scenesDone: ["KS004","KS011"], missionsDone: ["KM015"], play: "KenziePoolDebtSex" })>>
<</link>>
<<link "KS013 · Deepthroat Show-Off">>
<<run window.devReviewJump({ day: "Saturday", time: 22, location: "BedroomKenzie", scenesDone: ["KS004","KS011"], missionsDone: [], play: "KenzieDeepthroatShowoff" })>>
<</link>>
<<link "KS016 · Anal Finale">>
<<run window.devReviewJump({ day: "Saturday", time: 23, location: "BedroomKenzie", scenesDone: ["KS004","KS013"], missionsDone: [], play: "KenzieAnalFinale" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Kenzie Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Kitchen">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "KitchenValerie", scenesDone: ["KS006"], missionsDone: ["KM012"], play: "ReplayKenzieKitchenTease" })>>
<</link>>
<<link "Replay · Gym Sex">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "Gym", scenesDone: ["KS009"], missionsDone: ["KM007"], play: "ReplayKenzieFirstGymSex" })>>
<</link>>
<<link "Replay · Home Creampie">>
<<run window.devReviewJump({ day: "Thursday", time: 22, location: "BedroomKenzie", scenesDone: ["KS010"], missionsDone: ["KM013"], play: "ReplayKenzieHomeGush" })>>
<</link>>
<<link "Replay · Landlord">>
<<run window.devReviewJump({ day: "Thursday", time: 22, location: "BedroomKenzie", scenesDone: ["KS011"], missionsDone: ["KM014"], play: "ReplayKenzieLandlordCollect" })>>
<</link>>
<<link "Replay · Pool">>
<<run window.devReviewJump({ day: "Saturday", time: 15, location: "PoolValerie", scenesDone: ["KS012"], missionsDone: ["KM015"], play: "ReplayKenziePoolDebtSex" })>>
<</link>>
<<link "Replay · DT Show-Off">>
<<run window.devReviewJump({ day: "Saturday", time: 22, location: "BedroomKenzie", scenesDone: ["KS013"], missionsDone: [], play: "ReplayKenzieDeepthroatShowoff" })>>
<</link>>
<<link "Replay · Anal">>
<<run window.devReviewJump({ day: "Saturday", time: 23, location: "BedroomKenzie", scenesDone: ["KS016"], missionsDone: [], play: "ReplayKenzieAnalFinale" })>>
<</link>>
</div>
<</if>>
<</if>>
/* JENNA PHASE 2 DEV HUB */
<<if $devReviewChar is "all" or $devReviewChar is "jenna">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Jenna Phase 2 — Prep</h3>
<div class="menu-buttons">
<<link "Prep: sandbox + Phase 1 complete (through JS007)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Monday">>
<<set $time to 10>>
<<set $player.energy to 100>>
<<if def $openWorldGirls and def $openWorldGirls.jenna>>
<<set $openWorldGirls.jenna.love to 35>>
<<set $openWorldGirls.jenna.lust to 45>>
<<set $openWorldGirls.jenna.corruption to 25>>
<<set $openWorldGirls.jenna.loneliness to 40>>
<<set $openWorldGirls.jenna.approval to 55>>
<</if>>
<<if def $scenes>>
<<for _k range ["JS001","JS002","JS003","JS004","JS005","JS006","JS007"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["JM001","JM002","JM003","JM004"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: first sex done (JS017 + husband call)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.jennaFirstSex to true>>
<<set $keyEvents.jennaHusbandCallDone to true>>
<<set $actualDay to "Tuesday">>
<<set $time to 15>>
<<set $player.energy to 100>>
<<if def $openWorldGirls and def $openWorldGirls.jenna>>
<<set $openWorldGirls.jenna.love to 50>>
<<set $openWorldGirls.jenna.lust to 60>>
<<set $openWorldGirls.jenna.corruption to 40>>
<<set $openWorldGirls.jenna.loneliness to 25>>
<<set $openWorldGirls.jenna.approval to 70>>
<</if>>
<<if def $scenes>>
<<for _k range ["JS001","JS002","JS003","JS004","JS005","JS006","JS007","JS017"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["JM001","JM002","JM003","JM004","JM005","JM006","JM007","JM008"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Jenna Phase 2 statuses only">>
<<if def $missions>>
<<for _k range ["JM005","JM006","JM007","JM008","JM009","JM010","JM011","JM012","JM013","JM014","JM015","JM016","JM017","JM018","JM019","JM020","JM021","JM022","JM023","JM024"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 0>><</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["JS008","JS009","JS010","JS011","JS012","JS013","JS014","JS015","JS016","JS017","JS018","JS019","JS020"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 0>><</if>>
<</for>>
<</if>>
<<set $keyEvents.jennaFirstSex to false>>
<<set $keyEvents.jennaHusbandCallDone to false>>
<<set $keyEvents.jennaEmotionalDebt to false>>
<<if def $openWorldGirls and def $openWorldGirls.jenna>>
<<set $openWorldGirls.jenna.approval to 50>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Jenna Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "JM005 · Gym Spot">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", scenesDone: ["JS001","JS002","JS003","JS004","JS005","JS006","JS007"], missionsDone: ["JM001","JM002","JM003","JM004"], play: "JennaGymSpot" })>>
<</link>>
<<link "JM006 · Gym Depth">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", scenesDone: ["JS007"], missionsDone: ["JM005"], play: "JennaGymDepth" })>>
<</link>>
<<link "JM007 · Mat Partner">>
<<run window.devReviewJump({ day: "Tuesday", time: 7, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM006"], play: "JennaMatPartner" })>>
<</link>>
<<link "JM008 · Last Pose → yoga sex">>
<<run window.devReviewJump({ day: "Tuesday", time: 8, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM007"], play: "JennaLastPose" })>>
<</link>>
<<link "JM009 · Soft Layers">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: [], play: "JennaSoftLayers" })>>
<</link>>
<<link "JM010 · After Shower">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BathroomJenna", scenesDone: ["JS007"], missionsDone: ["JM009"], play: "JennaAfterShower" })>>
<</link>>
<<link "JM011 · Bare Garden → lapdance chain">>
<<run window.devReviewJump({ day: "Saturday", time: 15, location: "GardenJenna", scenesDone: ["JS007"], missionsDone: ["JM010"], play: "JennaBareGarden" })>>
<</link>>
<<link "JM012 · Footsteps">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BathroomJenna", scenesDone: ["JS007"], missionsDone: ["JM009"], play: "JennaFootsteps" })>>
<</link>>
<<link "JM014 · No Pretending → bath tease">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BathroomJenna", scenesDone: ["JS007"], missionsDone: ["JM012","JM013"], play: "JennaNoPretending" })>>
<</link>>
<<link "JM015 · Busy Lonely">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM006"], play: "JennaBusyLonely" })>>
<</link>>
<<link "JM020 · Quiet Morning → BJ">>
<<run window.devReviewJump({ day: "Saturday", time: 9, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: ["JM015","JM016","JM017","JM018","JM019"], play: "JennaQuietMorning" })>>
<</link>>
<<link "JM021 · Shoot Me → photoshoot sex">>
<<run window.devReviewJump({ day: "Wednesday", time: 16, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaShootMeProperly" })>>
<</link>>
<<link "JM022 · Closet → undress chain">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: ["JM011"], play: "JennaClosetConfidence" })>>
<</link>>
<<link "JM023 · Ledger → emotional debt">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaMoreThanThanks" })>>
<</link>>
<<link "JM024 · Call Prep">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaCallPrep" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Jenna Phase 2 — Scenes</h3>
<div class="menu-buttons">
<<link "JS008 · Lapdance">>
<<run window.devReviewJump({ day: "Saturday", time: 20, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM011"], play: "JennaLapdance" })>>
<</link>>
<<link "JS009 · Couch Strip">>
<<run window.devReviewJump({ day: "Saturday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS007","JS008"], missionsDone: ["JM011"], play: "JennaCouchStrip" })>>
<</link>>
<<link "JS013 · Bathroom Tease">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "BathroomJenna", scenesDone: ["JS007"], missionsDone: ["JM014"], play: "JennaBathroomTease" })>>
<</link>>
<<link "JS014 · First BJ">>
<<run window.devReviewJump({ day: "Saturday", time: 9, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: ["JM020"], play: "JennaFirstBJ" })>>
<</link>>
<<link "JS015 · Wrong Room">>
<<run window.devReviewJump({ day: "Saturday", time: 20, location: "BedroomJenna", scenesDone: ["JS007","JS014"], missionsDone: ["JM020"], play: "JennaWrongRoom" })>>
<</link>>
<<link "JS016 · Chair Night">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaChairNight" })>>
<</link>>
<<link "JS017 · Yoga Cardio (first PIV)">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "LivingRoomJenna", scenesDone: ["JS007"], missionsDone: ["JM008"], play: "JennaYogaCardio" })>>
<</link>>
<<link "JennaHusbandCall (one-time)">>
<<run window.devReviewJump({ day: "Tuesday", time: 10, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM008"], play: "JennaHusbandCall" })>>
<</link>>
<<link "JS018 · Photoshoot Sex">>
<<run window.devReviewJump({ day: "Wednesday", time: 17, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM021"], play: "JennaPhotoshootSex" })>>
<</link>>
<<link "JS019 · Lingerie Study">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "BedroomJenna", scenesDone: ["JS007","JS017","JS018"], missionsDone: ["JM021"], play: "JennaLingerieStud" })>>
<</link>>
<<link "JS020 · Emotional Debt">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "LivingRoomJenna", scenesDone: ["JS007","JS017"], missionsDone: ["JM023"], play: "JennaEmotionalDebt" })>>
<</link>>
<<link "JS010 · Slow Undress">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "BedroomJenna", scenesDone: ["JS007"], missionsDone: ["JM022"], play: "JennaSlowUndress" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Jenna Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Lapdance">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "LivingRoomJenna", scenesDone: ["JS008"], missionsDone: ["JM011"], play: "ReplayJennaLapdance" })>>
<</link>>
<<link "Replay · Yoga Cardio">>
<<run window.devReviewJump({ day: "Thursday", time: 10, location: "LivingRoomJenna", scenesDone: ["JS017"], missionsDone: ["JM008"], play: "ReplayJennaYogaCardio" })>>
<</link>>
<<link "Replay · First BJ">>
<<run window.devReviewJump({ day: "Thursday", time: 10, location: "BedroomJenna", scenesDone: ["JS014"], missionsDone: ["JM020"], play: "ReplayJennaFirstBJ" })>>
<</link>>
<<link "Replay · Photoshoot Sex">>
<<run window.devReviewJump({ day: "Thursday", time: 17, location: "LivingRoomJenna", scenesDone: ["JS018"], missionsDone: ["JM021"], play: "ReplayJennaPhotoshootSex" })>>
<</link>>
<<link "Replay · Emotional Debt">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "LivingRoomJenna", scenesDone: ["JS020"], missionsDone: ["JM023"], play: "ReplayJennaEmotionalDebt" })>>
<</link>>
</div>
<</if>>
<</if>>
/* JENNA PHASE 2 DEV HUB END */
/* SKYLAR PHASE 2 DEV HUB */
<<if $devReviewChar is "all" or $devReviewChar is "skylar">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Skylar Phase 2 — Prep</h3>
<div class="menu-buttons">
<<link "Prep: forced BJ done + address known">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.skylarAddressKnown to true>>
<<set $keyEvents.skylarHomeWelcome to false>>
<<set $actualDay to "Monday">>
<<set $time to 19>>
<<set $player.energy to 100>>
<<if def $storeSkylar>>
<<set $storeSkylar.love to 45>>
<<set $storeSkylar.lust to 40>>
<<set $storeSkylar.corruption to 25>>
<</if>>
<<if def $scenes>>
<<for _k range ["SkylarChangingRoomSpy","SkylarForcedBlowjob"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["018","019","020","021"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: home welcome done (SM005)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.skylarAddressKnown to true>>
<<set $keyEvents.skylarHomeWelcome to true>>
<<set $actualDay to "Tuesday">>
<<set $time to 19>>
<<set $player.energy to 100>>
<<if def $storeSkylar>>
<<set $storeSkylar.love to 50>>
<<set $storeSkylar.lust to 45>>
<<set $storeSkylar.corruption to 30>>
<</if>>
<<if def $scenes>>
<<for _k range ["SkylarChangingRoomSpy","SkylarForcedBlowjob"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<set $missions["SM005"].status to 1>>
<<set $missions["SM006"].status to 1>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: first sex + amenities">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.skylarAddressKnown to true>>
<<set $keyEvents.skylarHomeWelcome to true>>
<<set $keyEvents.skylarAmenities to true>>
<<set $keyEvents.skylarFirstSex to true>>
<<set $actualDay to "Wednesday">>
<<set $time to 19>>
<<set $player.energy to 100>>
<<if def $storeSkylar>>
<<set $storeSkylar.love to 60>>
<<set $storeSkylar.lust to 55>>
<<set $storeSkylar.corruption to 40>>
<</if>>
<<if def $scenes>>
<<for _k range ["SkylarForcedBlowjob","SS009","SS011"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["SM005","SM006","SM007","SM008","SM009","SM010","SM014"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Skylar Phase 2 statuses only">>
<<if def $missions>>
<<for _k range ["SM005","SM006","SM007","SM008","SM009","SM010","SM011","SM012","SM013","SM014","SM015","SM016","SM017","SM018","SM019","SM020"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 0>><</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["SS005","SS006","SS007","SS009","SS010","SS011","SS012","SS013","SS014","SS017"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 0>><</if>>
<</for>>
<</if>>
<<set $keyEvents.skylarHomeWelcome to false>>
<<set $keyEvents.skylarAmenities to false>>
<<set $keyEvents.skylarFirstSex to false>>
<<set $keyEvents.skylarAnal to false>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Skylar Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "SM005 · Keys & Boundaries">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "ApartmentSkylar", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM006"], play: "SkylarKeysBoundaries", keyEvents: { skylarAddressKnown: true } })>>
<</link>>
<<link "SM006 · Closing Checklist">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "LocalStore", scenesDone: ["SkylarForcedBlowjob"], missionsDone: [], play: "SkylarClosingChecklist" })>>
<</link>>
<<link "SM007 · Stock Ghost">>
<<run window.devReviewJump({ day: "Monday", time: 16, location: "LocalStoreStock", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM006"], play: "SkylarStockGhost" })>>
<</link>>
<<link "SM008 · After Till → car BJ">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LocalStore", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM006","SM007"], play: "SkylarAfterTill" })>>
<</link>>
<<link "SM009 · Pool Code">>
<<run window.devReviewJump({ day: "Tuesday", time: 19, location: "PoolComplexSkylar", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM005"], play: "SkylarPoolCode", keyEvents: { skylarAddressKnown: true, skylarHomeWelcome: true } })>>
<</link>>
<<link "SM010 · Stay Late → JOI BJ">>
<<run window.devReviewJump({ day: "Tuesday", time: 19, location: "LivingRoomSkylar", scenesDone: ["SkylarForcedBlowjob"], missionsDone: ["SM005"], play: "SkylarStayLate", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM011 · Spot Me → anal">>
<<run window.devReviewJump({ day: "Wednesday", time: 9, location: "Gym", scenesDone: ["SS011"], missionsDone: ["SM010"], play: "SkylarSpotMeOnce", keyEvents: { skylarFirstSex: true, skylarHomeWelcome: true } })>>
<</link>>
<<link "SM012 · Late Fee">>
<<run window.devReviewJump({ day: "Tuesday", time: 18, location: "LocalStore", scenesDone: ["SS010"], missionsDone: ["SM008"], play: "SkylarLateFee" })>>
<</link>>
<<link "SM013 · Out of Town → jacuzzi">>
<<run window.devReviewJump({ day: "Friday", time: 19, location: "ApartmentSkylar", scenesDone: ["SS009"], missionsDone: ["SM010"], play: "SkylarOutOfTown", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM014 · Robe Evening">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "BedroomSkylar", scenesDone: [], missionsDone: ["SM005"], play: "SkylarRobeEvening", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM016 · Steam → shower">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "BathroomSkylar", scenesDone: [], missionsDone: ["SM014","SM015"], play: "SkylarSteam", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM017 · Couch Rules → finger">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomSkylar", scenesDone: ["SS009"], missionsDone: ["SM010"], play: "SkylarCouchRules", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SM018 · Pool Evening → pantyhose">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "PoolComplexSkylar", scenesDone: ["SS011"], missionsDone: ["SM009"], play: "SkylarPoolEvening", keyEvents: { skylarAmenities: true, skylarHomeWelcome: true } })>>
<</link>>
<<link "SM019 · Golden Hour">>
<<run window.devReviewJump({ day: "Wednesday", time: 19, location: "BalconySkylar", scenesDone: ["SS011"], missionsDone: [], play: "SkylarGoldenHour", keyEvents: { skylarFirstSex: true } })>>
<</link>>
<<link "SM020 · Pearls Night">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomSkylar", scenesDone: ["SS011"], missionsDone: [], play: "SkylarPearlsNight", keyEvents: { skylarFirstSex: true } })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Skylar Phase 2 — Scenes</h3>
<div class="menu-buttons">
<<link "SS005 · Shower Dildo">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "BathroomSkylar", scenesDone: [], missionsDone: ["SM016"], play: "SkylarShowerDildo", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SS006 · Sofa Finger">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomSkylar", scenesDone: [], missionsDone: ["SM017"], play: "SkylarSofaFinger" })>>
<</link>>
<<link "SS007 · Spank Night">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomSkylar", scenesDone: ["SS006"], missionsDone: ["SM017"], play: "SkylarSpankNight" })>>
<</link>>
<<link "SS009 · Instruction BJ">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomSkylar", scenesDone: [], missionsDone: ["SM010"], play: "SkylarInstructionBJ" })>>
<</link>>
<<link "SS010 · Car BJ">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LocalStore", scenesDone: [], missionsDone: ["SM008"], play: "SkylarCarBJ" })>>
<</link>>
<<link "SS011 · Passionate (first PIV)">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomSkylar", scenesDone: ["SS009"], missionsDone: ["SM010"], play: "SkylarPassionate", keyEvents: { skylarHomeWelcome: true } })>>
<</link>>
<<link "SS012 · Pantyhose Pool">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "PoolComplexSkylar", scenesDone: [], missionsDone: ["SM018"], play: "SkylarPantyhosePool", keyEvents: { skylarAmenities: true } })>>
<</link>>
<<link "SS013 · Homemade Anal">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomSkylar", scenesDone: ["SS011"], missionsDone: ["SM011"], play: "SkylarHomemadeAnal", keyEvents: { skylarFirstSex: true } })>>
<</link>>
<<link "SS014 · Jacuzzi Trip">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "ApartmentSkylar", scenesDone: ["SS009"], missionsDone: ["SM013"], play: "SkylarJacuzziTrip" })>>
<</link>>
<<link "SS017 · Busty Brunette">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomSkylar", scenesDone: ["SS013"], missionsDone: ["SM011"], play: "SkylarBustyBrunette", keyEvents: { skylarAnal: true } })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Skylar Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Shower">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BathroomSkylar", scenesDone: ["SS005"], missionsDone: ["SM016"], play: "ReplaySkylarShowerDildo" })>>
<</link>>
<<link "Replay · Car BJ">>
<<run window.devReviewJump({ day: "Thursday", time: 19, location: "LocalStore", scenesDone: ["SS010"], missionsDone: ["SM008"], play: "ReplaySkylarCarBJ" })>>
<</link>>
<<link "Replay · Passionate">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomSkylar", scenesDone: ["SS011"], missionsDone: ["SM010"], play: "ReplaySkylarPassionate" })>>
<</link>>
<<link "Replay · Pool pantyhose">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "PoolComplexSkylar", scenesDone: ["SS012"], missionsDone: ["SM018"], play: "ReplaySkylarPantyhosePool" })>>
<</link>>
<<link "Replay · Homemade anal">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomSkylar", scenesDone: ["SS013"], missionsDone: ["SM011"], play: "ReplaySkylarHomemadeAnal" })>>
<</link>>
</div>
<</if>>
<</if>>
/* SKYLAR PHASE 2 DEV HUB END */
/* ANGELA PHASE 2 DEV HUB */
<<if $devReviewChar is "all" or $devReviewChar is "angela">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Angela Phase 2 — Prep</h3>
<div class="menu-buttons">
<<link "Prep: garden HJ done (Phase 2 start)">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Monday">>
<<set $time to 10>>
<<set $player.energy to 100>>
<<if def $neighborAngela>>
<<set $neighborAngela.love to 40>>
<<set $neighborAngela.lust to 35>>
<<set $neighborAngela.corruption to 15>>
<<set $neighborAngela.domination to 0>>
<</if>>
<<set $angelaRooms to { kitchen: false, living: false, bath: false, office: false, bedroom: false, pool: false }>>
<<set $angelaPath to null>>
<<if def $scenes>>
<<for _k range ["AngelaWalkingSpy","AngelaThanksHandjob"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["009","010","011","016","017"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: kitchen + living + bath open">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $actualDay to "Tuesday">>
<<set $time to 15>>
<<set $player.energy to 100>>
<<if def $neighborAngela>>
<<set $neighborAngela.love to 55>>
<<set $neighborAngela.lust to 45>>
<<set $neighborAngela.corruption to 25>>
<</if>>
<<set $angelaRooms to { kitchen: true, living: true, bath: true, office: false, bedroom: false, pool: false }>>
<<if def $scenes>>
<<for _k range ["AngelaWalkingSpy","AngelaThanksHandjob"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["AM005","AM006","AM007","AM017","AM018"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: first PIV + spare key path">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.angelaFirstSex to true>>
<<set $actualDay to "Wednesday">>
<<set $time to 20>>
<<set $player.energy to 100>>
<<if def $neighborAngela>>
<<set $neighborAngela.love to 70>>
<<set $neighborAngela.lust to 60>>
<<set $neighborAngela.corruption to 40>>
<</if>>
<<set $angelaRooms to { kitchen: true, living: true, bath: true, office: true, bedroom: false, pool: true }>>
<<if def $scenes>>
<<for _k range ["AngelaThanksHandjob","AS003","AS007","AS008","AS009","AS010","AS011","AS012"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $missions>>
<<for _k range ["AM005","AM006","AM007","AM008","AM009","AM013","AM014","AM016","AM017","AM018","AM019"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Prep: domme path unlocked">>
<<set $keyEvents.linearWeekendActive to false>>
<<set $keyEvents.angelaFirstSex to true>>
<<set $keyEvents.angelaOvernight to true>>
<<set $keyEvents.angelaDommePath to true>>
<<set $angelaPath to "domme">>
<<set $actualDay to "Thursday">>
<<set $time to 20>>
<<set $player.energy to 100>>
<<if def $neighborAngela>>
<<set $neighborAngela.love to 75>>
<<set $neighborAngela.lust to 65>>
<<set $neighborAngela.corruption to 50>>
<<set $neighborAngela.domination to 30>>
<</if>>
<<set $angelaRooms to { kitchen: true, living: true, bath: true, office: true, bedroom: true, pool: true }>>
<<if def $missions>>
<<for _k range ["AM005","AM006","AM007","AM008","AM009","AM016","AM017","AM018","AM019","AM020","AM021","AM023"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 1>><</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["AS009","AS010","AS012","AS013","AS014"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 1>><</if>>
<</for>>
<</if>>
<<goto "DevPassageReview">>
<</link>>
<<link "Reset Angela Phase 2 statuses only">>
<<if def $missions>>
<<for _k range ["AM005","AM006","AM007","AM008","AM009","AM010","AM011","AM012","AM013","AM014","AM015","AM016","AM017","AM018","AM019","AM020","AM021","AM022","AM023","AM024"]>>
<<if def $missions[_k]>><<set $missions[_k].status to 0>><</if>>
<</for>>
<</if>>
<<if def $scenes>>
<<for _k range ["AS003","AS004","AS005","AS006","AS007","AS008","AS009","AS010","AS011","AS012","AS013","AS014","AS015","AS016","AS017"]>>
<<if def $scenes[_k]>><<set $scenes[_k].status to 0>><</if>>
<</for>>
<</if>>
<<set $angelaRooms to { kitchen: false, living: false, bath: false, office: false, bedroom: false, pool: false }>>
<<set $angelaPath to null>>
<<set $keyEvents.angelaFirstSex to false>>
<<set $keyEvents.angelaOvernight to false>>
<<set $keyEvents.angelaDommePath to false>>
<<set $keyEvents.angelaDevotedPath to false>>
<<set $keyEvents.angelaDommeAwakened to false>>
<<set $keyEvents.angelaSpareKey to false>>
<<goto "DevPassageReview">>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Angela Phase 2 — Missions</h3>
<div class="menu-buttons">
<<link "AM005 · Front Door Rules">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "AngelaHouse", scenesDone: ["AngelaThanksHandjob"], missionsDone: ["016","017"], play: "AngelaFrontDoorRules" })>>
<</link>>
<<link "AM006 · Measure Twice">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "KitchenAngela", scenesDone: ["AngelaThanksHandjob"], missionsDone: ["AM005"], play: "AngelaMeasureTwice", keyEvents: {} })>>
<</link>>
<<link "AM007 · Taste Test">>
<<run window.devReviewJump({ day: "Monday", time: 15, location: "KitchenAngela", missionsDone: ["AM005","AM006"], play: "AngelaTasteTest" })>>
<</link>>
<<link "AM008 · Slice & Scroll">>
<<run window.devReviewJump({ day: "Tuesday", time: 17, location: "CityCenter", missionsDone: ["AM007"], play: "AngelaSliceScroll" })>>
<</link>>
<<link "AM009 · Make It Official">>
<<run window.devReviewJump({ day: "Tuesday", time: 18, location: "CityCenter", missionsDone: ["AM008"], play: "AngelaMakeOfficial" })>>
<</link>>
<<link "AM010 · Trail Prep">>
<<run window.devReviewJump({ day: "Wednesday", time: 10, location: "Park", missionsDone: ["AM009"], play: "AngelaTrailPrep" })>>
<</link>>
<<link "AM011 · Steep Climb">>
<<run window.devReviewJump({ day: "Wednesday", time: 11, location: "Park", missionsDone: ["AM010"], play: "AngelaSteepClimb" })>>
<</link>>
<<link "AM012 · Summit Dare → hike">>
<<run window.devReviewJump({ day: "Wednesday", time: 14, location: "Park", missionsDone: ["AM011"], play: "AngelaSummitDare" })>>
<</link>>
<<link "AM013 · Weekend Splash">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "AngelaHouse", missionsDone: ["AM017"], play: "AngelaWeekendSplash" })>>
<</link>>
<<link "AM014 · Sunscreen → pool eat">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "PoolAngela", missionsDone: ["AM013"], play: "AngelaSunscreen" })>>
<</link>>
<<link "AM015 · Sunrise Cup → morning">>
<<run window.devReviewJump({ day: "Thursday", time: 8, location: "KitchenAngela", missionsDone: ["AM020"], play: "AngelaSunriseCup", keyEvents: { angelaOvernight: true } })>>
<</link>>
<<link "AM016 · Soft Landing → titjob">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "LivingRoomAngela", scenesDone: ["AS009"], missionsDone: [], play: "AngelaSoftLanding" })>>
<</link>>
<<link "AM017 · Settling In">>
<<run window.devReviewJump({ day: "Monday", time: 16, location: "AngelaHouse", missionsDone: ["AM007"], play: "AngelaSettlingIn" })>>
<</link>>
<<link "AM018 · Guest Towels">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "AngelaHouse", missionsDone: ["AM017"], play: "AngelaGuestTowels" })>>
<</link>>
<<link "AM019 · Quiet Hours">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "AngelaHouse", missionsDone: ["AM018"], play: "AngelaQuietHours" })>>
<</link>>
<<link "AM020 · Spare Key">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "AngelaHouse", scenesDone: ["AS012"], missionsDone: [], play: "AngelaSpareKey" })>>
<</link>>
<<link "AM021 · Night Watering">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "AngelaHouseGarden", missionsDone: ["AM005"], play: "AngelaNightWatering" })>>
<</link>>
<<link "AM022 · Carol's Lights">>
<<run window.devReviewJump({ day: "Monday", time: 20, location: "AngelaHouseGarden", missionsDone: ["AM021"], play: "AngelaCarolsLights" })>>
<</link>>
<<link "AM023 · Who Holds the Gloves">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "LivingRoomAngela", missionsDone: ["AM016"], play: "AngelaWhoHoldsGloves" })>>
<</link>>
<<link "AM024 · House Rules → femdom">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomAngela", missionsDone: ["AM023"], play: "AngelaHouseRules", keyEvents: { angelaDommePath: true } })>>
<</link>>
</div>
<h3>Angela — Room hubs</h3>
<div class="menu-buttons">
<<link "AngelaHouse hub">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "AngelaHouse", scenesDone: ["AngelaThanksHandjob"], play: "AngelaHouse" })>>
<</link>>
<<link "Kitchen">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "KitchenAngela", missionsDone: ["AM005"], play: "KitchenAngela" })>>
<</link>>
<<link "Living room">>
<<run window.devReviewJump({ day: "Monday", time: 18, location: "LivingRoomAngela", missionsDone: ["AM017"], play: "LivingRoomAngela" })>>
<</link>>
<<link "Pool">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "PoolAngela", missionsDone: ["AM013"], play: "PoolAngela" })>>
<</link>>
<<link "Bedroom">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "BedroomAngela", missionsDone: ["AM020"], play: "BedroomAngela" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Angela Phase 2 — Scenes</h3>
<div class="menu-buttons">
<<link "AS003 · Living Tease">>
<<run window.devReviewJump({ day: "Monday", time: 19, location: "LivingRoomAngela", missionsDone: ["AM017"], play: "AngelaLivingTease" })>>
<</link>>
<<link "AS006 · Hike Heat">>
<<run window.devReviewJump({ day: "Wednesday", time: 15, location: "Park", missionsDone: ["AM012"], play: "AngelaHikeHeat" })>>
<</link>>
<<link "AS007 · Shower Grab">>
<<run window.devReviewJump({ day: "Tuesday", time: 9, location: "BathroomAngela", missionsDone: ["AM018"], play: "AngelaShowerGrab" })>>
<</link>>
<<link "AS008 · Office Sloopy">>
<<run window.devReviewJump({ day: "Tuesday", time: 14, location: "OfficeAngela", missionsDone: ["AM019"], play: "AngelaOfficeSloppy" })>>
<</link>>
<<link "AS009 · POV Blowjob">>
<<run window.devReviewJump({ day: "Tuesday", time: 20, location: "LivingRoomAngela", scenesDone: ["AS008"], play: "AngelaPOVBlowjob" })>>
<</link>>
<<link "AS010 · Tittyfuck">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "LivingRoomAngela", missionsDone: ["AM016"], play: "AngelaTittyfuck" })>>
<</link>>
<<link "AS011 · Pool Eat">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "PoolAngela", missionsDone: ["AM014"], play: "AngelaPoolEat" })>>
<</link>>
<<link "AS012 · Kitchen Curves (first PIV)">>
<<run window.devReviewJump({ day: "Wednesday", time: 20, location: "KitchenAngela", scenesDone: ["AS010"], play: "AngelaCurves" })>>
<</link>>
<<link "AS013 · Overnight">>
<<run window.devReviewJump({ day: "Wednesday", time: 21, location: "BedroomAngela", missionsDone: ["AM020"], play: "AngelaOvernight" })>>
<</link>>
<<link "AS014 · Morning After">>
<<run window.devReviewJump({ day: "Thursday", time: 8, location: "BedroomAngela", missionsDone: ["AM015"], play: "AngelaMorningAfter", keyEvents: { angelaOvernight: true } })>>
<</link>>
<<link "AS015 · Femdom">>
<<run window.devReviewJump({ day: "Thursday", time: 20, location: "BedroomAngela", missionsDone: ["AM024"], play: "AngelaFemdom", keyEvents: { angelaDommePath: true } })>>
<</link>>
<<link "AS016 · Eating Cum">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "BedroomAngela", scenesDone: ["AS015"], play: "AngelaEatingCum" })>>
<</link>>
<<link "AS017 · True Anal">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BedroomAngela", scenesDone: ["AS014"], play: "AngelaTrueAnal" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Angela Phase 2 — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Curves">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "KitchenAngela", scenesDone: ["AS012"], play: "ReplayAngelaCurves" })>>
<</link>>
<<link "Replay · POV BJ">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "LivingRoomAngela", scenesDone: ["AS009"], play: "ReplayAngelaPOVBlowjob" })>>
<</link>>
<<link "Replay · Femdom">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BedroomAngela", scenesDone: ["AS015"], play: "ReplayAngelaFemdom" })>>
<</link>>
<<link "Replay · Pool Eat">>
<<run window.devReviewJump({ day: "Friday", time: 15, location: "PoolAngela", scenesDone: ["AS011"], play: "ReplayAngelaPoolEat" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ANGELA PHASE 2 DEV HUB END */
/* ===== v0.5* ROXY ===== */
<<if $devReviewChar is "all" or $devReviewChar is "roxy">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Roxy — Location (click her in Who's Here)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Velvet Curtain · Friday 21:00 (before dance)">>
<<run window.devReviewJump({ day: "Friday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: null, scenesReset: ["RX001","RX003","RX004","RX002"], keyEvents: { roxyDanceDone: false, roxyPrivateDone: false, roxyChampagneDone: false, roxyRainDone: false, roxyAddressKnown: false }, play: "VelvetCurtain" })>>
<</link>>
<<link "Velvet Curtain · Saturday 21:00 (after dance — private available)">>
<<run window.devReviewJump({ day: "Saturday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Friday", scenesDone: ["RX001"], keyEvents: { roxyDanceDone: true, roxyPrivateDone: false, roxyChampagneDone: false, roxyRainDone: false }, play: "VelvetCurtain" })>>
<</link>>
<<link "Velvet Curtain · Monday 21:00 (after private — sex available)">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Saturday", scenesDone: ["RX001","RX003"], keyEvents: { roxyDanceDone: true, roxyPrivateDone: true, roxyChampagneDone: false }, play: "VelvetCurtain" })>>
<</link>>
<<link "Velvet Curtain · Thursday 21:00 (after sex — rain available)">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Monday", scenesDone: ["RX001","RX003","RX004"], keyEvents: { roxyDanceDone: true, roxyPrivateDone: true, roxyChampagneDone: true, roxyRainDone: false }, play: "VelvetCurtain" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Roxy — Nights (separate scenes)</h3>
<div class="menu-buttons">
<<link "Night 1 · Stage dance">>
<<run window.devReviewJump({ day: "Friday", time: 21, location: "VelvetCurtain", money: 200, scenesReset: ["RX001"], keyEvents: { roxyDanceDone: false }, play: "RoxyStageDance" })>>
<</link>>
<<link "Night 2 · Private room ($40)">>
<<run window.devReviewJump({ day: "Saturday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Friday", keyEvents: { roxyDanceDone: true, roxyPrivateDone: false }, play: "RoxyPrivateRoom" })>>
<</link>>
<<link "Night 3 · Champagne finish ($60)">>
<<run window.devReviewJump({ day: "Monday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Saturday", keyEvents: { roxyDanceDone: true, roxyPrivateDone: true, roxyChampagneDone: false }, play: "RoxyChampagneSex" })>>
<</link>>
<<link "Night 4 · Rain specialty ($80)">>
<<run window.devReviewJump({ day: "Thursday", time: 21, location: "VelvetCurtain", money: 200, roxyLastSetDay: "Monday", keyEvents: { roxyChampagneDone: true, roxyRainDone: false }, play: "RoxyRainRoom" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Roxy — Replays</h3>
<div class="menu-buttons">
<<link "Replay · Dance">>
<<run window.devReviewJump({ day: "Friday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX001"], play: "ReplayRoxyDance" })>>
<</link>>
<<link "Replay · Private ($40)">>
<<run window.devReviewJump({ day: "Saturday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX003"], play: "ReplayRoxyPrivate" })>>
<</link>>
<<link "Replay · Champagne finish ($60)">>
<<run window.devReviewJump({ day: "Monday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX004"], play: "ReplayRoxyChampagne" })>>
<</link>>
<<link "Replay · Rain ($80)">>
<<run window.devReviewJump({ day: "Thursday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX002"], keyEvents: { roxyChampagneDone: true, roxyRainDone: true }, play: "ReplayRoxyRain" })>>
<</link>>
<<link "Approach Roxy (dispatcher)">>
<<run window.devReviewJump({ day: "Friday", time: 22, location: "VelvetCurtain", money: 200, scenesDone: ["RX001","RX003","RX004","RX002"], keyEvents: { roxyDanceDone: true, roxyPrivateDone: true, roxyChampagneDone: true, roxyRainDone: true }, play: "ApproachRoxy" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== v0.5* PAIGE ===== */
<<if $devReviewChar is "all" or $devReviewChar is "paige">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Paige — Location (before the mission)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Mall Clothing · Wednesday 15:00 (Who's Here)">>
<<run window.devReviewJump({ day: "Wednesday", time: 15, location: "MallClothing", nested: { fittingRoomGirl: { reset: true } }, scenesReset: ["PS001"], play: "MallClothing" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Paige — Mission</h3>
<div class="menu-buttons">
<<link "Help Her Pick an Outfit">>
<<run window.devReviewJump({ day: "Wednesday", time: 15, location: "MallClothing", nested: { fittingRoomGirl: { reset: true } }, play: "PaigeFittingHelp" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Paige — Scene</h3>
<div class="menu-buttons">
<<link "Fitting Room">>
<<run window.devReviewJump({ day: "Wednesday", time: 15, location: "MallClothing", nested: { fittingRoomGirl: { reset: true, missions: ["fittingHelp"] } }, play: "PaigeFittingRoom" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Paige — Replay</h3>
<div class="menu-buttons">
<<link "Replay · Fitting Room">>
<<run window.devReviewJump({ day: "Wednesday", time: 16, location: "MallClothing", nested: { fittingRoomGirl: { missions: ["fittingHelp"], scenes: ["fittingRoom"] } }, scenesDone: ["PS001"], play: "ReplayPaigeFittingRoom" })>>
<</link>>
<<link "Approach Paige (dispatcher)">>
<<run window.devReviewJump({ day: "Wednesday", time: 16, location: "MallClothing", nested: { fittingRoomGirl: { missions: ["fittingHelp"], scenes: ["fittingRoom"] } }, scenesDone: ["PS001"], play: "ApproachPaige" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== v0.5* FIONA ===== */
<<if $devReviewChar is "all" or $devReviewChar is "fiona">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Fiona — Location (before the mission)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Library · Tuesday 15:00 (Who's Here — Elise desk + Fiona)">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "Library", nested: { libraryGirl: { reset: true } }, scenesReset: ["LS001"], play: "Library" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Fiona — Mission</h3>
<div class="menu-buttons">
<<link "Reach the High Shelf">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "Library", nested: { libraryGirl: { reset: true } }, play: "FionaHighShelf" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Fiona — Scene</h3>
<div class="menu-buttons">
<<link "Private Reading Room">>
<<run window.devReviewJump({ day: "Tuesday", time: 15, location: "Library", nested: { libraryGirl: { reset: true, missions: ["highShelf"] } }, play: "FionaLibraryStacks" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Fiona — Replay</h3>
<div class="menu-buttons">
<<link "Replay · Library">>
<<run window.devReviewJump({ day: "Tuesday", time: 16, location: "Library", nested: { libraryGirl: { missions: ["highShelf"], scenes: ["libraryStacks"] } }, scenesDone: ["LS001"], play: "ReplayFionaLibrary" })>>
<</link>>
<<link "Approach Fiona (dispatcher)">>
<<run window.devReviewJump({ day: "Tuesday", time: 16, location: "Library", nested: { libraryGirl: { missions: ["highShelf"], scenes: ["libraryStacks"] } }, scenesDone: ["LS001"], play: "ApproachFiona" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== v0.5* CARMEN ===== */
<<if $devReviewChar is "all" or $devReviewChar is "carmen">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Carmen — Location (before the mission)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Park Trail · Monday 8:00 (Who's Here)">>
<<run window.devReviewJump({ day: "Monday", time: 8, location: "ParkTrail", nested: { parkGirl: { reset: true } }, scenesReset: ["HS001"], play: "ParkTrail" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Carmen — Mission</h3>
<div class="menu-buttons">
<<link "Trail Collision">>
<<run window.devReviewJump({ day: "Monday", time: 8, location: "ParkTrail", nested: { parkGirl: { reset: true } }, play: "CarmenTrailRun" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "scene">>
<h3>Carmen — Scene</h3>
<div class="menu-buttons">
<<link "Off the Path">>
<<run window.devReviewJump({ day: "Monday", time: 8, location: "ParkTrail", nested: { parkGirl: { reset: true, missions: ["trailRun"] } }, play: "CarmenTrailHookup" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "replay">>
<h3>Carmen — Replay</h3>
<div class="menu-buttons">
<<link "Replay · Trail">>
<<run window.devReviewJump({ day: "Monday", time: 9, location: "ParkTrail", nested: { parkGirl: { missions: ["trailRun"], scenes: ["trailHookup"] } }, scenesDone: ["HS001"], play: "ReplayCarmenTrail" })>>
<</link>>
<<link "Approach Carmen (dispatcher)">>
<<run window.devReviewJump({ day: "Monday", time: 9, location: "ParkTrail", nested: { parkGirl: { missions: ["trailRun"], scenes: ["trailHookup"] } }, scenesDone: ["HS001"], play: "ApproachCarmen" })>>
<</link>>
</div>
<</if>>
<</if>>
/* ===== v0.5* STAFF ===== */
<<if $devReviewChar is "all" or $devReviewChar is "staff">>
<<if $devReviewKind is "all" or $devReviewKind is "prep">>
<h3>Staff — Locations (Who's Here)</h3>
<div class="menu-buttons" style="margin-bottom: var(--sp-4);">
<<link "Harper · CoffeeShop · Monday 10:00">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "CoffeeShop", play: "CoffeeShop" })>>
<</link>>
<<link "Elise · Library desk · Monday 11:00">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "Library", play: "Library" })>>
<</link>>
<<link "Sienna · Gilded Lily · Friday 20:00">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BarGildedLily", play: "BarGildedLily" })>>
<</link>>
<<link "Marcy · Rusty Mug · Friday 20:00 (face only)">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BarRustyMug", play: "BarRustyMug" })>>
<</link>>
<<link "Nikki · Gym desk · Monday 10:00">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", play: "Gym" })>>
<</link>>
</div>
<</if>>
<<if $devReviewKind is "all" or $devReviewKind is "mission">>
<h3>Staff — Talk / Flirt</h3>
<p class="spy-narrative">No missions. These are the interaction passages.</p>
<div class="menu-buttons">
<<link "Harper Talk">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "CoffeeShop", play: "HarperTalk" })>>
<</link>>
<<link "Harper Flirt">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "CoffeeShop", play: "HarperFlirt" })>>
<</link>>
<<link "Elise Talk">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "Library", play: "EliseTalk" })>>
<</link>>
<<link "Elise Flirt">>
<<run window.devReviewJump({ day: "Monday", time: 11, location: "Library", play: "EliseFlirt" })>>
<</link>>
<<link "Sienna Talk">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BarGildedLily", play: "SiennaTalk" })>>
<</link>>
<<link "Sienna Flirt">>
<<run window.devReviewJump({ day: "Friday", time: 20, location: "BarGildedLily", play: "SiennaFlirt" })>>
<</link>>
<<link "Nikki Talk">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", play: "NikkiTalk" })>>
<</link>>
<<link "Nikki Flirt">>
<<run window.devReviewJump({ day: "Monday", time: 10, location: "Gym", play: "NikkiFlirt" })>>
<</link>>
</div>
<</if>>
<</if>>
<<if $devReviewChar is "brandi" or $devReviewChar is "core">>
<p class="spy-narrative">
No dedicated review block for <strong><<= $devReviewChar>></strong> yet — Valerie, Kenzie, Jenna, Skylar, Angela Phase 2, and the v0.5* cast (Roxy / Paige / Fiona / Carmen / Staff) are wired.
</p>
<</if>>
<div class="menu-buttons" style="margin-top: var(--sp-4);">
[[← Back to Title->Start]]
</div>
</div><<set $player to {
energy: 100,
money: 50,
lust: 0,
intelligence: 5,
strength: 5,
charisma: 5,
luck: 0,
love: 0,
corruption: 0,
domination: 0,
inventory: [],
running: 0,
cardio: 0,
photography: 0,
observation: 0,
animalCare: 0,
athleticism: 0,
flexibility: 0
}>>
<<set $cheatModeActive to false>>
<<set $dailyActivities to {
running: {
limit: 2,
count: 0
},
photography: {
limit: 2,
count: 0
},
observationParkLake: {
limit: 2,
count: 0
},
feedDucks: {
limit: 1,
count: 0
},
playBasketball: {
limit: 2,
count: 0
},
yogaParkCourt: {
limit: 2,
count: 0
},
gymTraining: {
limit: 1,
count: 0
},
gymCardio: {
limit: 1,
count: 0
},
studyLibrary: {
limit: 1,
count: 0
},
laptopWork: {
limit: 3,
count: 0
},
laptopStudy: {
limit: 2,
count: 0
},
laptopPorn: {
limit: 3,
count: 0
},
laptopGame: {
limit: 4,
count: 0
},
laptopCaptions: {
limit: 3,
count: 0
},
workLocalStore: {
limit: 1,
count: 0
},
workCoffeeShop: {
limit: 1,
count: 0
},
workGym: {
limit: 1,
count: 0
},
workBookstore: {
limit: 1,
count: 0
}
}>>
<<set $auntCarol to {
name: "Aunt Carol",
love: 0,
corruption: 0,
caring: 50,
domination: 0,
lust: 0,
locationSchedule: {
Kitchen: { start: 8, end: 11 },
LivingRoom: { start: 13, end: 22 },
BedroomCarol: { start: 22, end: 6 },
Pool: { start: 11, end: 14 },
Bathroom: { start: 7, end: 8 }
},
interactions: {
talk: {
limit: 2,
stats: { love: 5, lust: 2 },
passage: "TalkAuntCarol"
},
flirt: {
limit: 1,
stats: { love: 3, lust: 5, corruption: 2 },
passage: "FlirtAuntCarol"
},
approach: {
limit: 99,
stats: {},
passage: "ApproachAuntCarol"
}
},
dailyInteractions: {
talk: 0,
flirt: 0,
approach: 0,
gift: 0
},
/* Replay system — see docs/AGENT-STANDARDS.md §Replay System.
dailyReplayCount resets each new day in SleepSequence / *NightSleep. */
dailyReplayCount: 0,
maxDailyReplays: 3,
face: "img/chars/carol/face/carol_face.webp",
dialogClass: "carol",
/* Pool of in-character refusal lines for when the daily cap is hit
or no replays match the current location/period/mood. The dispatcher
picks one at random. Add more freely. */
refusalLines: {
capHit: [
"Again? You're a rabbit, aren't you?",
"Sweetie — give your aunt a minute to *breathe*.",
"I love the enthusiasm, but I'm not your personal everything. Not today.",
"Easy, tiger. We have time.",
"Mm — not now. I'm thinking. About other things."
],
wrongMoment: [
"Not here, sweetie. Bad timing.",
"Mmm — I love that you're thinking about it. But not in this room.",
"Later. I'm in the middle of something.",
"Patience. I want it to be worth it when it happens."
]
}
}>>
<<set $angelaRooms to {
kitchen: false,
living: false,
bath: false,
office: false,
bedroom: false,
pool: false
}>>
<<set $angelaPath to null>>
<<set $neighborAngela to {
name: "Angela",
love: 0,
lust: 0,
corruption: 0,
locationSchedule: {
AngelaHouse: { start: 8, end: 21, lines: ["Well hello, neighbor! Did you come by just to see me?", "The house gets so quiet sometimes... it's lovely to have some company.", "Make yourself at home. Carol's nephew is always welcome under my roof."] },
AngelaHouseGarden: { start: 9, end: 18, lines: ["Careful with the rose bushes... the thorns bite, but the scent is heavenly.", "It's warm out today. You wouldn't mind helping me with a few weeds, would you?", "Gardening keeps me grounded. Plus, the sun does wonders for the skin."] },
KitchenAngela: { start: 8, end: 20, lines: ["I was just putting on some tea. Would you like a cup?", "A growing young man always needs good food. Let me see what I have in the fridge.", "Careful around the stove, sweetie — it's hot today."] },
LivingRoomAngela: { start: 12, end: 21, lines: ["Come sit down, take a load off. Tell me what you've been up to.", "I was just doing a little reading. Sit next to me.", "The sofa is very comfortable... plenty of room for two."] },
BathroomAngela: { start: 8, end: 21, lines: ["Oh! You startled me... make sure you knock next time, handsome.", "Just freshening up. You like the perfume?", "Don't peek while I'm fixing my hair!"] },
OfficeAngela: { start: 9, end: 17, lines: ["Just looking over some paperwork. Boring adult stuff.", "Need something? I could use an excuse to look away from this screen.", "You're a welcome distraction from this paperwork, you know."] },
BedroomAngela: { start: 18, end: 22, lines: ["My bedroom? You're getting quite bold, aren't you?", "It's private in here. I like it that way.", "Shut the door behind you... we wouldn't want anyone listening in."] },
PoolAngela: { start: 12, end: 20, lines: ["The water's wonderful! Why don't you come dip your feet in?", "Don't stare too much, handsome... unless you like what you see.", "A little sun, a little swimming... care to join me?"] },
CityCenter: { start: 16, end: 20, lines: ["Running errands in town. Fancy running into you here!", "A familiar face in the city! Want to walk with me for a bit?", "The afternoon crowd is lively today."] },
Park: { start: 9, end: 16, lines: ["The fresh air out here is so refreshing.", "I love taking afternoon strolls through the park.", "Look at us, running into each other like this."] }
},
domination: 0,
interactions: {
talk: {
limit: 2,
stats: { love: 5, lust: 1 },
passage: "TalkAngela"
},
compliment: {
limit: 1,
stats: { love: 4, lust: 3, corruption: 1 },
passage: "ComplimentAngela"
},
approach: {
limit: 99,
stats: {},
passage: "ApproachAngela"
}
},
dailyInteractions: {
talk: 0,
compliment: 0,
approach: 0,
gift: 0
},
dailyReplayCount: 0,
maxDailyReplays: 2,
face: "img/chars/neighbor/face/angela_face.jpg",
dialogClass: "angela",
randomLines: [
"Well hello there, handsome. Taking a walk around the neighborhood?",
"Always a treat to see your face. Carol keeping you well entertained?",
"Just tending to things around here. It gets so quiet by myself.",
"If you ever need some company or a refreshing drink, my door is always unlocked for you.",
"Look at you... looking more charming every time you stop by.",
"Don't be a stranger, dear. You know you're always welcome."
],
refusalLines: {
capHit: [
"Oh — gosh, no, I really shouldn't again, not today. People will start *talking*.",
"(Blushing furiously) That's — that's enough for one day, isn't it? My nerves can only handle so much.",
"I'd love to but I have so much to do in the garden. Maybe tomorrow?",
"You're going to wear me out, you naughty thing. Tomorrow."
],
wrongMoment: [
"Not here, please — anyone could see us.",
"Mm, not now. I'm in the middle of something.",
"Later, okay? Promise me later.",
"I want to, but the timing... it isn't right."
]
}
}>>
<<set $storeSkylar to {
name: "Skylar",
love: 0,
lust: 0,
corruption: 0,
locationSchedule: {
LocalStore: { start: 9, end: 20 },
LocalStoreStock: { start: 9, end: 20 },
ApartmentSkylar: { start: 18, end: 8 },
LivingRoomSkylar: { start: 18, end: 8 },
BedroomSkylar: { start: 18, end: 8 },
BathroomSkylar: { start: 18, end: 8 },
BalconySkylar: { start: 18, end: 23 },
PoolComplexSkylar: { start: 18, end: 23 },
Gym: { start: 7, end: 10 }
},
interactions: {
talk: {
limit: 2,
stats: { love: 3, lust: 1 },
passage: "TalkSkylar"
},
flirt: {
limit: 1,
stats: { love: 2, lust: 4, corruption: 1 },
passage: "FlirtSkylar"
},
approach: {
limit: 99,
stats: {},
passage: "ApproachSkylar"
}
},
dailyInteractions: {
talk: 0,
flirt: 0,
approach: 0,
gift: 0
},
dailyReplayCount: 0,
maxDailyReplays: 2,
face: "img/chars/skylar/face/skylar_face.jpg",
dialogClass: "skylar",
refusalLines: {
capHit: [
"Are you serious? I've got a store to run.",
"Twice already today and you want a third? Get out.",
"I'm at work. I have customers. Come back tomorrow.",
"Ugh — fine, no. I need a break. Even retail workers get those."
],
wrongMoment: [
"Not in front of the register. I'm not getting fired over you.",
"Not now. I've got a delivery coming.",
"Pick a better moment. I'm not in the mood right now.",
"Are you serious? Read the room."
]
}
}>>
<<set $openWorldGirls to {
"brandi": {
name: "Brandi",
love: 0,
lust: 0,
corruption: 0,
face: "img/chars/brandi/face/brandi_face.jpg",
dialogClass: "brandi",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"Twice in one day? Really? You don't think I have anywhere to *be*?",
"I have a fitting at three. Even if I wanted to — which I don't.",
"What part of 'I have a husband' do you not understand? Not today.",
"You're going to start a rumor at this rate. Pace yourself, sweetie.",
"Get out. Get out. Get out. We've already done this today."
],
wrongMoment: [
"Whatever you're thinking, the answer is *probably* no — and *certainly* not here.",
"Excuse me. Adults are working. Wrong room, wrong time.",
"Are you actually breathing in my direction? Try not to.",
"I have nothing for you right now. Come back when I'm bored. Or richer."
]
},
weeklySchedule: {
"Monday": {
"Gym": { start: 9, end: 11, lines: ["Ugh, do you mind? I'm trying to focus on my glutes.", "I pay a premium for this gym to avoid... distractions.", "Don't stare. It's rude."] },
"LivingRoomBrandi": { start: 13, end: 16, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
"PoolBrandi": { start: 16, end: 18, lines: ["This is a private pool, not a public one.", "The water is perfectly heated. Don't ruin the temperature.", "I hope you're not planning on getting in."] },
"BedroomBrandi": { start: 22, end: 6, lines: ["Get out. Now.", "This is my sanctuary. You're trespassing.", "Do I need to call security?"] }
},
"Tuesday": {
"Mall": { start: 10, end: 14, lines: ["Retail therapy is the only therapy that works.", "Oh, you shop here too? How quaint.", "I'm looking for something that screams 'I'm richer than you'."] },
"GardenBrandi": { start: 15, end: 17, lines: ["My gardener is a genius, isn't he?", "These are imported Dutch tulips. They're probably worth more than your shirt.", "The HOA president loves my garden. Of course."] },
"KitchenBrandi": { start: 18, end: 20, lines: ["I'm preparing a single, nutritionally-perfect almond.", "My husband is flying the chef in next week. This is just... temporary.", "Don't touch the countertops. They're Italian marble."] },
"BedroomBrandi": { start: 22, end: 6, lines: ["I'm trying to sleep. Go away.", "Are you deaf? I said get out.", "My husband will hear about this."] }
},
"Wednesday": {
"LivingRoomBrandi": { start: 9, end: 12, lines: ["I'm on a conference call with Zurich. Be quiet.", "This is where I conduct my business. Important business.", "Could you fetch me my Pellegrino? No, the other one."] },
"PoolBrandi": { start: 14, end: 16, lines: ["I'm working on my tan. It's a full-time job.", "This bikini costs more than your education.", "I can feel you staring. Stop it."] },
"BarGildedLily": { start: 19, end: 22, lines: ["A real man would have offered to buy me a drink by now.", "The bartender here knows my order. A 'Disdain on the Rocks'.", "I come here to be seen, not to be bothered by the help."] },
"BedroomBrandi": { start: 23, end: 6, lines: ["Seriously? Again? Get the hell out!", "I'm calling the police. I mean it this time.", "You have five seconds to disappear."] }
},
"Thursday": {
"Gym": { start: 10, end: 12, lines: ["I'm on set three of twelve. Do not interrupt.", "My personal trainer says my form is perfect. Obviously.", "Is this the only treadmill you could find?"] },
"Mall": { start: 14, end: 17, lines: ["Just returning something that wasn't exclusive enough.", "I need a new handbag. This one is from last season.", "I can see you following me. It's pathetic."] },
"LivingRoomBrandi": { start: 18, end: 21, lines: ["Watching my shows. They're about rich people, you wouldn't understand.", "Shhh! This is the part where she reveals she's her own evil twin.", "If you're going to stand there, at least make yourself useful and dust something."] },
"BedroomBrandi": { start: 22, end: 6, lines: ["Final warning.", "You're starting to scare me. In a boring way.", "Don't make me use my self-defense training."] }
},
"Friday": {
"LivingRoomBrandi": { start: 11, end: 15, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
"PoolBrandi": { start: 15, end: 17, lines: ["A pre-evening dip is essential.", "Can you see any imperfections? No? Good.", "I'm visualizing world peace. Or a new diamond bracelet. Same thing."] },
"BarGildedLily": { start: 20, end: 23, lines: ["Look at this place. Full of wannabes.", "My husband should be here. He's... busy.", "Another one? Don't mind if I do. It's on his credit card."] }
},
"Saturday": {
"GardenBrandi": { start: 9, end: 11, lines: ["The weekend sunlight is better for the petunias.", "I'm considering a water feature. Something understated, like a mini-Versailles.", "Hello again. Still loitering?"] },
"PoolBrandi": { start: 12, end: 16, lines: ["Saturday is for swimming laps. Twenty of them. Before lunch.", "This new sunscreen was flown in from France.", "I feel like I'm in a zoo exhibit."] },
"LivingRoomBrandi": { start: 18, end: 23, lines: ["Tonight is movie night. I'm watching a documentary about myself.", "This couch is for sitting elegantly, not for slouching.", "Could you fluff my pillows? No, not like that!"] },
"BedroomBrandi": { start: 23, end: 6, lines: ["You're persistent, I'll give you that. And creepy.", "Okay, what do you want?", "Just... don't touch anything."] }
},
"Sunday": {
"KitchenBrandi": { start: 10, end: 12, lines: ["I'm making a detox smoothie. It tastes like despair, but it works.", "Sunday brunch. Just me and my thoughts.", "Are you hungry? There's tap water."] },
"PoolBrandi": { start: 13, end: 17, lines: ["Sundays are for quiet contemplation and minimal clothing.", "Don't you have your own pool to look at?", "I might fall asleep. Don't try anything."] },
"BedroomBrandi": { start: 18, end: 6, lines: ["I'm reading. It's a book about powerful women. You wouldn't like it.", "Don't interrupt. The protagonist is about to execute a hostile takeover.", "Fine. You can stay for a minute. One minute."] }
}
},
interactions: { "talk": { limit: 2, stats: { love: 1, lust: 1, corruption: 1 }, passage: "BrandiTalk" }, "flirt": { limit: 1, stats: { love: 2, lust: 3, corruption: 2 }, passage: "BrandiFlirt" }, "approach": { limit: 99, stats: {}, passage: "ApproachBrandi" } },
dailyInteractions: { talk: 0, flirt: 0, approach: 0, gift: 0 },
randomLines: [
"I was just about to do something important. What do you want?",
"Try not to breathe so loudly. It's distracting.",
"Is there a point to you being here, or are you just... existing in my general vicinity?",
"I have a thousand things on my mind. You wouldn't understand a single one.",
"Don't touch anything. Everything here costs more than your car.",
"I swear, if you track dirt in here, I'll send you the cleaning bill.",
"Can I help you, or are you just lost?",
"I'm trying to maintain a certain... ambiance. You're disrupting it.",
"Oh, it's you again. My day was going so well.",
"Whatever you're thinking of asking, the answer is probably no."
],
},
"valerie": {
name: "Valerie",
love: 0,
lust: 0,
corruption: 0,
face: "img/chars/valerie/face/valerie_face.jpg",
dialogClass: "valerie",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"The energy needs to settle, sweet soul. We've already shared enough today.",
"My chakras are positively *radiating*, but they need rest. Come back tomorrow.",
"I'm so flattered, but the universe whispers 'enough'. Listen with me.",
"Twice in a day overflows the cup, dear. Let it pour back into the well.",
"Beautiful soul, you must learn to receive in silence too. Tomorrow."
],
wrongMoment: [
"The vibration isn't right at the moment. Trust me — I can feel it.",
"Your aura is lovely, but the room's energy says no, not now.",
"There are forces aligning. Don't rush them, beautiful.",
"I'm not in the right space for this. Be patient with the universe."
]
},
weeklySchedule: {
"Monday": { "KitchenValerie": { start: 8, end: 10, lines: ["Good morning! Making some herbal tea, it aligns the chakras.", "The universe provides such wonderful flavors, don't you think?", "Want a cup? It'll help you feel the morning's energy."] }, "GardenValerie": { start: 10, end: 13, lines: ["I'm just talking to the plants. They have so much wisdom to share.", "Feel that connection to the Earth? It's so grounding.", "This little sprout is a fighter. I admire its spirit."] }, "LivingRoomValerie": { start: 13, end: 18, lines: ["The light in here is perfect for painting this afternoon.", "I'm working on a piece about spiritual longing. It's very... abstract.", "Just let the colors speak to you. What do you see?"] }, "PoolValerie": { start: 18, end: 20, lines: ["A sunset swim is like a baptism for the soul.", "The water holds memories, you know.", "Just floating... becoming one with everything."] }, "BedroomValerie": { start: 22, end: 7, lines: ["Time to dream. The astral plane awaits.", "Goodnight. May your dreams be full of cosmic truth.", "The scent of lavender helps guide the spirit."] } },
"Tuesday": { "LivingRoomValerie": { start: 9, end: 12, lines: ["Just finishing up my morning yoga. Salutations to the sun!", "This pose really opens up the heart chakra.", "Breathing in peace, breathing out negativity. Join me?"] }, "PoolValerie": { start: 12, end: 15, lines: ["The midday sun energizes the water, and me!", "I love the feeling of sun on my skin. It's so... primal.", "Just letting go of all earthly attachments for a while."] }, "GardenValerie": { start: 15, end: 18, lines: ["Weeding is a form of meditation, you know. Clearing out the old to make way for the new.", "This soil has such a good, earthy smell.", "I think I'll plant some chamomile here. For peace."] }, "KitchenValerie": { start: 18, end: 20, lines: ["Making a big vegetarian stew. It's food for the soul.", "The secret ingredient is love. And a little bit of paprika.", "There's plenty to share if you're hungry."] }, "BedroomValerie": { start: 22, end: 7, lines: ["Writing in my dream journal. Last night was a trip.", "The moon is so bright tonight.", "Goodnight, stardust."] } },
"Wednesday": { "BedroomValerie": { start: 9, end: 11, lines: ["Just doing some morning stretches in my sacred space.", "It's important to start the day with intention.", "I was just reading about past lives. Fascinating stuff."] }, "KitchenValerie": { start: 11, end: 13, lines: ["Lunchtime! A nice big salad with ingredients from the garden.", "You can really taste the life force in fresh vegetables.", "It's all about nourishing the body and the spirit."] }, "LivingRoomValerie": { start: 13, end: 19, lines: ["I'm trying a new pottery technique. It's very... sensual, working with the clay.", "Feel this? It's taking shape. Becoming what it's meant to be.", "Art is just channeled energy, really."] }, "BathroomValerie": { start: 19, end: 20, lines: ["A nice warm bath with essential oils to end the day.", "I'm using eucalyptus tonight. For clarity.", "The sound of water is so calming."] }, "BedroomValerie": { start: 21, end: 7, lines: ["Time to meditate before sleep.", "Another day, another cycle of the universe.", "Sleep well. Let the universe guide you."] } },
"Thursday": { "GardenValerie": { start: 8, end: 11, lines: ["Good morning, little flowers!", "I'm repotting my ferns today. They needed more room to grow.", "Isn't it amazing how life just... finds a way?"] }, "PoolValerie": { start: 11, end: 14, lines: ["Floating on my back, just watching the clouds. It's better than any screen.", "The water feels different today. More... thoughtful.", "Come on in! The water's perfect."] }, "LivingRoomValerie": { start: 14, end: 21, lines: ["I've got some good music on. It's very... tribal. Feel the rhythm?", "Sometimes you just have to dance like nobody's watching.", "I'm just sketching. Trying to capture the essence of a feeling."] }, "BedroomValerie": { start: 22, end: 7, lines: ["Goodnight. I hope the stars are kind to you tonight.", "Time to let the subconscious take over.", "I feel a powerful dream coming on."] } },
"Friday": { "LivingRoomValerie": { start: 10, end: 14, lines: ["Friday has such a vibrant energy, doesn't it?", "I'm working on a big, colorful canvas today. Very expressive.", "Just throwing paint around and seeing what happens. It's liberating!"] }, "GardenValerie": { start: 14, end: 17, lines: ["Harvesting some herbs for the weekend.", "This mint smells divine. Nature's perfume.", "I should make you a little sachet for good vibes."] }, "PoolValerie": { start: 17, end: 19, lines: ["A sunset swim is the perfect way to welcome the weekend.", "The colors are just... wow.", "It's so peaceful right now."] }, "KitchenValerie": { start: 19, end: 21, lines: ["Making some homemade pasta tonight. Want to help me roll the dough?", "It's so much better when you make it with your own hands.", "A little wine, a little pasta... the perfect Friday night."] }, "BedroomValerie": { start: 23, end: 7, lines: ["What a wonderful day. I feel so... aligned.", "Goodnight. May you find what you're looking for in your dreams.", "The universe is singing tonight."] } },
"Saturday": { "KitchenValerie": { start: 9, end: 11, lines: ["Pancakes! It's a pancake kind of morning.", "You can't be sad when you're eating pancakes. It's a cosmic law.", "Maple syrup or blueberry compote?"] }, "PoolValerie": { start: 11, end: 15, lines: ["The best way to spend a Saturday afternoon.", "Just soaking up the good vibes and the sun.", "I could stay here all day."] }, "LivingRoomValerie": { start: 15, end: 22, lines: ["I'm reading tarot cards. The universe has a message for me.", "The High Priestess... interesting. A day of intuition.", "Want me to read your cards? Be warned, they don't lie."] }, "BedroomValerie": { start: 23, end: 8, lines: ["The energy of the weekend is intense. Time to recharge.", "Goodnight. See you in the dreamscape.", "I'm leaving my window open to let the moonlight in."] } },
"Sunday": { "GardenValerie": { start: 10, end: 12, lines: ["Just some light gardening. A Sunday ritual.", "The bees are so busy today. They're an inspiration.", "Everything is so green and alive."] }, "LivingRoomValerie": { start: 12, end: 17, lines: ["A lazy Sunday afternoon. Perfect for reading and listening to music.", "I'm just enjoying the stillness.", "Sometimes the most productive thing you can do is nothing at all."] }, "PoolValerie": { start: 17, end: 19, lines: ["One last dip before the week begins.", "Washing away the last of the weekend's lazy energy.", "The water is so quiet and reflective now."] }, "BedroomValerie": { start: 21, end: 7, lines: ["Preparing my spirit for the week ahead.", "Goodnight. May you have peaceful dreams.", "And so, another cycle ends... and begins."] } }
},
interactions: { "talk": { limit: 3, stats: { love: 3, lust: 1 }, passage: "ValerieTalk" }, "flirt": { limit: 2, stats: { love: 2, lust: 4, corruption: 1 }, passage: "ValerieFlirt" }, "approach": { limit: 99, stats: {}, passage: "ApproachValerie" } },
dailyInteractions: { talk: 0, flirt: 0, approach: 0, gift: 0 },
randomLines: [
"I was just pondering the interconnectedness of all things. What's on your spirit's mind?",
"The energy in here feels a little different today, don't you think?",
"Remember to take a deep breath. The universe is sending you exactly what you need.",
"I just had the most interesting thought about cosmic dust...",
"Hello there, fellow traveler. How is your journey today?",
"I feel like the universe wanted us to cross paths right at this moment.",
"Are you feeling centered today? It's important to stay grounded.",
"I was just listening to the silence. It has so much to say.",
"What a beautiful moment. We should be grateful for these simple gifts.",
"I'm sending you good vibrations. Can you feel them?"
],
},
"kenzie": {
name: "Kenzie",
love: 0,
lust: 0,
corruption: 0,
rebellion: 10,
debt: 0,
face: "img/chars/kenzie/face/kenzie_face.jpg",
dialogClass: "kenzie",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"Damn, again? Are you a rabbit or something? Chill.",
"What part of 'I'm tired' is unclear? Already had my fun. Beat it.",
"Twice was the favor, sweetie. Three's the price. Got cash?",
"I literally just did that. Are you keeping a *log* or something? Weirdo.",
"Bro. Bro. Take a hint. Tomorrow."
],
wrongMoment: [
"Wrong vibe. Wrong place. Read the room.",
"Yeah... no. Whatever you're after, it's not happening right now.",
"You really are following me around, aren't you. Pathetic.",
"I'm not in the mood to be your show-and-tell. Leave."
]
},
weeklySchedule: {
"Monday": { "BedroomKenzie": { start: 8, end: 11, lines: ["Ugh, Monday. Leave me alone.", "I'm busy. Doing... stuff.", "Can't you see I have headphones on?"] }, "Gym": { start: 12, end: 14, lines: ["Form check or get out of my mirror.", "Don't stare. Spot if you're useful.", "Glute day. Mind your eyes... mostly."] }, "LocalStore": { start: 15, end: 16, lines: ["Just grabbing some snacks. The good kind, not my mom's rabbit food.", "Yeah, I know Skylar. She's cool.", "Are you following me or something?"] }, "LivingRoomValerie": { start: 18, end: 21, lines: ["Mom's making me watch some weird foreign film with her.", "This is so boring. Can we put on a real movie?", "Hi. Don't mind me, just suffering."] }, "BedroomKenzie": { start: 21, end: 7, lines: ["Finally, some peace. I'm gaming.", "Don't come in, I'm in the middle of a raid!", "Goodnight. Or whatever."] } },
"Tuesday": { "BedroomKenzie": { start: 9, end: 12, lines: ["I'm listening to music. It's probably too loud for you.", "It's a new band. You've probably never heard of them.", "Do you need something? I'm kind of in the zone."] }, "CoffeeShop": { start: 14, end: 17, lines: ["Booth for two. Don't make it a thing.", "If my card declines, look away.", "This is not a date. It's... food strategy."] }, "KitchenValerie": { start: 19, end: 20, lines: ["Looking for actual food. Not 'tofu scramble'.", "There's leftover pizza in the back. My stash.", "You want some? Fine, but you owe me."] }, "BedroomKenzie": { start: 20, end: 7, lines: ["Watching some streamer. She's hilarious.", "No, you can't watch with me. It's... a private stream.", "Later."] } },
"Wednesday": { "BedroomKenzie": { start: 10, end: 12, lines: ["It's my day to do absolutely nothing. It's an art form.", "Just scrolling through memes. It's a living.", "Can I help you? If not, the door is that way."] }, "Gym": { start: 13, end: 15, lines: ["Midweek sweat. Don't interrupt the set.", "Spotter privilege is earned.", "If you're here late, don't be a coward."] }, "LivingRoomValerie": { start: 16, end: 18, lines: ["Mom's trying to teach me pottery. I made an ashtray.", "It's kinda cool, I guess. Messy.", "Don't look at my work! It's not finished."] }, "BedroomKenzie": { start: 18, end: 7, lines: ["Okay, for real, I'm busy tonight.", "My friends are online. Go away.", "Just... get out."] } },
"Thursday": { "Mall": { start: 13, end: 16, lines: ["Just hanging out. Seeing if any of my friends are here.", "This place is so lame, but it's better than being at home.", "Are you stalking me? It's starting to feel like you're stalking me."] }, "CoffeeShop": { start: 17, end: 19, lines: ["Second sitting energy. Keep up.", "Noodles fix problems. Temporarily.", "Don't look at the total."] }, "LivingRoomValerie": { start: 20, end: 22, lines: ["Ugh, family TV night. Kill me now.", "Yeah, my mom's cool, but she has terrible taste in shows.", "Can you change the channel when she's not looking?"] }, "BedroomKenzie": { start: 22, end: 7, lines: ["Don't even think about it.", "I'm locking my door tonight.", "Goodnight."] } },
"Friday": { "BedroomKenzie": { start: 11, end: 14, lines: ["Getting ready to go out. This is a process, you can't rush it.", "Does this top look okay? Don't answer that, I don't care what you think.", "I need to find my other shoe. Have you seen it?"] }, "Gym": { start: 15, end: 17, lines: ["Friday pump. After hours optional.", "If the floor clears, stay useful.", "Don't tell Mom I skip cool-down."] }, "BarRustyMug": { start: 20, end: 23, lines: ["My friend's older brother got us in. It's cool, right?", "Don't tell my mom you saw me here, okay? Seriously.", "This beer tastes like crap. But it's about the experience, you know?"] }, "BedroomKenzie": { start: 23, end: 8, lines: ["The room is spinning. Ugh.", "I'm never drinking again. Probably.", "Get me some water?"] } },
"Saturday": { "PoolValerie": { start: 12, end: 15, lines: ["Mom forced me to come out for some 'vitamin D'.", "It's so bright out here. I need my sunglasses.", "The water's okay, I guess. If you're into that."] }, "Mall": { start: 16, end: 19, lines: ["I need a new video game. This is a life or death situation.", "Fair lights are dumb. Fun though.", "Why are you always here when I'm here?"] }, "BedroomKenzie": { start: 20, end: 8, lines: ["Okay, Saturday night. New game. Do not disturb.", "I'm going to be up all night pwning noobs.", "If the house is on fire, slide a note under the door."] } },
"Sunday": { "BedroomKenzie": { start: 11, end: 16, lines: ["I'm recovering from last night. My everything hurts.", "Just watching videos in bed. Don't judge me.", "Can you close the door on your way out? The light... it burns."] }, "CoffeeShop": { start: 16, end: 18, lines: ["Sunday booth. Low stakes. Still order too much.", "Don't make me talk about debt before caffeine.", "This is recovery food. Sacred."] }, "KitchenValerie": { start: 18, end: 19, lines: ["I need carbs. All of them. Now.", "Is there any real food in this house?", "Mom's trying to make me drink a kale smoothie. It's an act of war."] }, "LivingRoomValerie": { start: 19, end: 22, lines: ["Fine, I'll watch one movie with her. But I get to pick.", "No, we are not watching another foreign film about sad people.", "Can you grab me a blanket? I'm cold."] }, "BedroomKenzie": { start: 22, end: 8, lines: ["Okay, the weekend's over. Thank god.", "I need to mentally prepare for Monday.", "Goodnight. Don't let the bed bugs bite."] } }
},
interactions: { "talk": { limit: 3, stats: { love: 2, lust: 1 }, passage: "KenzieTalk" }, "flirt": { limit: 2, stats: { love: 1, lust: 5, corruption: 2, rebellion: 1 }, passage: "KenzieFlirt" }, "smoke": { limit: 1, stats: { love: 3, lust: 2, corruption: 3, rebellion: 2 }, passage: "KenzieSmoke", requires: { location: ["GardenValerie", "Park"] } }, "approach": { limit: 99, stats: {}, passage: "ApproachKenzie" } },
dailyInteractions: { talk: 0, flirt: 0, smoke: 0, approach: 0, gift: 0 },
randomLines: [
"Ugh, what now?",
"Don't you have something better to do?",
"I'm in the middle of a very important... scroll. Don't interrupt.",
"If you're looking for my mom, she's probably meditating at a plant or something.",
"This house is so boring. I'm dying of boredom.",
"Can you not? I'm trying to concentrate on literally anything else.",
"Are you lost or just wandering around aimlessly?",
"Yeah, hi. Whatever.",
"Just so you know, I can hear you from here. My headphones aren't even on.",
"Did you need something, or are you just enjoying the awkward silence?"
],
},
"jenna": {
name: "Jenna",
love: 0,
lust: 0,
corruption: 0,
loneliness: 70,
approval: 50,
face: "img/chars/jenna/face/jenna_face.jpg",
dialogClass: "jenna",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"Oh — I'd love to, I really would. But you've already given me so much today.",
"I'd love to keep going, but I need a moment to... *breathe* between visits.",
"If I let you back in this soon, I'll just... start hoping. And hoping is dangerous.",
"Twice in a day? My husband would be *so* jealous. Tomorrow, please.",
"I'm so grateful you came by. But my heart can only take so much in one day."
],
wrongMoment: [
"I'd love to, but it's not the right moment. Maybe later? Please?",
"Not now. The neighbors notice when cars stop too long.",
"I'm in the middle of something. Come back later — I'll be here.",
"It's not the right time, but please don't go far. I get lonely."
]
},
weeklySchedule: {
"Monday": { "LivingRoomJenna": { start: 7, end: 8, lines: ["Good morning. Just my daily yoga to start the day.", "It's important to stay centered, especially when you're alone a lot.", "This pose helps with balance. Both physical and mental."] }, "Gym": { start: 9, end: 11, lines: ["Gotta get my workout in. No excuses!", "I love the feeling of a good sweat session. Makes me feel alive.", "Just focusing on my form today."] }, "KitchenJenna": { start: 12, end: 13, lines: ["Post-workout protein shake. It's all about the gains.", "Meal prep is key to staying on track.", "It's just grilled chicken and broccoli. Again."] }, "GardenJenna": { start: 14, end: 16, lines: ["A little bit of sun and fresh air does wonders.", "My husband loves these roses. I try to keep them nice for when he's back.", "It's so quiet out here."] }, "PoolJenna": { start: 16, end: 18, lines: ["A few laps to cool down. It's great for cardio.", "The water feels so good on tired muscles.", "Just swimming and thinking."] }, "LivingRoomJenna": { start: 19, end: 21, lines: ["Time to relax with a movie. It's better than staring at the walls.", "I've seen this one a dozen times. It's comforting.", "It gets so quiet at night."] }, "BathroomJenna": { start: 21, end: 22, lines: ["Just a quick shower before bed.", "The water is still hot if you needed anything.", "I leave the door cracked when I forget... or when I hope."] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 7, lines: ["Time to turn in. Another day down.", "Goodnight. It was... nice seeing someone today.", "Sometimes the bed feels so big..."] } },
"Tuesday": { "LivingRoomJenna": { start: 7, end: 8, lines: ["Morning yoga again. Consistency is everything.", "Just trying to clear my head for the day.", "Deep breaths... in and out."] }, "Gym": { start: 9, end: 11, lines: ["Leg day. The best and worst day of the week.", "Feel the burn! That's how you know it's working.", "Could you... check my form on this squat?"] }, "KitchenJenna": { start: 12, end: 13, lines: ["Another healthy lunch. It gets a little boring.", "I should try a new recipe sometime. But it's a lot of effort for one person.", "More water. Hydration is key."] }, "LivingRoomJenna": { start: 14, end: 17, lines: ["I'm trying to read this new book. It's hard to focus sometimes.", "It's a romance novel. A girl can dream, right?", "The house is always so tidy. Nothing ever moves."] }, "PoolJenna": { start: 17, end: 19, lines: ["Just floating. It's nice to feel weightless.", "I love watching the sky change colors from the water.", "It's so peaceful... almost too peaceful."] }, "LivingRoomJenna": { start: 20, end: 22, lines: ["Trying to find something good to watch on TV.", "So many channels and nothing on.", "I miss having someone to argue with over the remote."] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 7, lines: ["Another day, another night alone.", "Goodnight. Sleep well.", "I hope he calls tomorrow."] } },
"Wednesday": { "LivingRoomJenna": { start: 7, end: 8, lines: ["Time for yoga. It's my routine.", "Just stretching and breathing.", "It's a good way to start the day on a positive note."] }, "Gym": { start: 9, end: 11, lines: ["Arm day! Gotta keep toned.", "Do you work out much? It's a great stress reliever.", "I think I'll try the rowing machine today."] }, "KitchenJenna": { start: 12, end: 13, lines: ["Making a smoothie. It's quick and easy.", "Sometimes I just don't have the energy to cook a full meal.", "This one has spinach. You can't even taste it. Mostly."] }, "GardenJenna": { start: 15, end: 17, lines: ["Weeding the flower beds. It's surprisingly therapeutic.", "These pesky weeds just keep coming back.", "A little bit of hard work in the sun is good for the soul."] }, "LivingRoomJenna": { start: 18, end: 22, lines: ["I'm catching up on my favorite series.", "It's nice to get lost in someone else's drama for a while.", "Want to watch an episode with me?"] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 7, lines: ["Well, goodnight.", "Another day over.", "Hope tomorrow is a little more exciting."] } },
"Thursday": { "LivingRoomJenna": { start: 7, end: 8, lines: ["Yoga time. It's a non-negotiable part of my morning.", "Feeling a good stretch today.", "Namaste."] }, "Gym": { start: 9, end: 11, lines: ["Cardio day. Thirty minutes on the elliptical.", "Just trying to get my heart rate up.", "Music is essential for a good cardio session."] }, "KitchenJenna": { start: 12, end: 13, lines: ["Just a light salad for lunch today.", "It's all about clean eating.", "Sometimes I wish I could just order a pizza."] }, "PoolJenna": { start: 14, end: 17, lines: ["The pool is my happy place.", "Just doing some light exercises in the water. It's low-impact.", "It's so quiet and peaceful here."] }, "LivingRoomJenna": { start: 18, end: 22, lines: ["I think I'll just listen to some music tonight.", "Sometimes TV is too much noise.", "It's nice to just sit and be."] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 7, lines: ["Goodnight. See you tomorrow.", "Time to recharge.", "Another lonely night."] } },
"Friday": { "LivingRoomJenna": { start: 7, end: 8, lines: ["Last yoga session of the week. Gotta make it count.", "I feel so energized after this.", "Ready for the weekend. Or, as ready as I can be."] }, "Gym": { start: 9, end: 11, lines: ["Full body workout today, to kick off the weekend.", "It feels good to push myself.", "Maybe I'll go for a personal best today."] }, "KitchenJenna": { start: 12, end: 13, lines: ["Treating myself to a slightly more interesting lunch today.", "Still healthy, but with... flavor.", "It's Friday, after all."] }, "PoolJenna": { start: 14, end: 16, lines: ["A quick dip before I get ready to go out.", "Gotta wash off all that gym sweat.", "The water feels amazing."] }, "BathroomJenna": { start: 18, end: 19, lines: ["Just getting ready. It takes a while to look this... effortless.", "Do you think this dress is too much?", "A little makeup can make you feel like a new person."] }, "BarGildedLily": { start: 20, end: 23, lines: ["I come here with my girlfriends sometimes. It's nice to get out.", "Just having a glass of wine and enjoying the atmosphere.", "It's nice to feel like a normal person for a night."] }, "BedroomJenna": { start: 23, end: 7, lines: ["What a night. It was good to get out.", "Now I'm exhausted.", "Goodnight."] } },
"Saturday": { "LivingRoomJenna": { start: 8, end: 9, lines: ["A nice, relaxed Saturday morning yoga session.", "No rush today. Just enjoying the movement.", "It's nice to not have a strict schedule."] }, "Gym": { start: 10, end: 12, lines: ["A weekend workout is the best kind of workout.", "The gym is always more crowded on Saturdays.", "Just doing my thing."] }, "KitchenJenna": { start: 13, end: 14, lines: ["Making a big brunch. It's my Saturday tradition.", "I always make too much for one person.", "Want some? There's plenty."] }, "PoolJenna": { start: 15, end: 19, lines: ["This is what Saturdays are for. Just lounging by the pool.", "I could spend all day out here with a good book.", "The sun feels incredible."] }, "LivingRoomJenna": { start: 20, end: 23, lines: ["Saturday night movie night!", "I'm watching a comedy. I need a good laugh.", "Popcorn is mandatory. It's the law."] }, "BedroomJenna": { start: 23, end: 8, lines: ["What a perfect, lazy day.", "I feel so relaxed.", "Goodnight. Sweet dreams."] } },
"Sunday": { "LivingRoomJenna": { start: 8, end: 9, lines: ["A very gentle yoga flow to ease into Sunday.", "Just being mindful and present.", "It's a beautiful morning."] }, "GardenJenna": { start: 10, end: 12, lines: ["Just deadheading the roses and enjoying the quiet.", "It's so peaceful out here on a Sunday morning.", "The garden is my happy place."] }, "KitchenJenna": { start: 13, end: 14, lines: ["Prepping some healthy meals for the week ahead.", "It makes the weekdays so much easier.", "It's a little bit of work now for a lot of peace later."] }, "LivingRoomJenna": { start: 15, end: 22, lines: ["The Sunday scaries are starting to kick in.", "Just trying to relax and not think about Monday.", "I think I'll just read and listen to music until bed."] }, "BathroomJenna": { start: 20, end: 21, lines: ["Just getting ready for bed.", "Do I look okay in this?", "The house is so quiet at night."] }, "BedroomJenna": { start: 22, end: 7, lines: ["Well, the weekend's over.", "Time to face another week.", "Goodnight. I hope it's a good week."] } }
},
interactions: { "talk": { limit: 3, stats: { love: 3, loneliness: -2 }, passage: "JennaTalk" }, "flirt": { limit: 2, stats: { love: 2, lust: 3, corruption: 1, loneliness: -1 }, passage: "JennaFlirt" }, "coffee": { limit: 1, stats: { love: 5, loneliness: -5 }, passage: "JennaCoffee", requires: { location: ["KitchenJenna", "LivingRoomJenna"] } }, "approach": { limit: 99, stats: {}, passage: "ApproachJenna" } },
dailyInteractions: { talk: 0, flirt: 0, coffee: 0, approach: 0, gift: 0 },
randomLines: [
"Oh, hello. I was just... thinking about my to-do list.",
"It's so quiet in this house sometimes, isn't it?",
"Just trying to stay busy. It's the best way.",
"Another day, another set of routines to get through.",
"I should probably be doing something more productive right now.",
"It's funny, you get used to the silence after a while.",
"Did you need something? I was just about to start my next task.",
"This house feels so big when it's just one person.",
"I hope I'm not in your way.",
"It's... nice to see another person. Breaks up the monotony."
],
},
"roxy": {
name: "Roxy",
love: 0,
lust: 15,
corruption: 30,
trust: 0,
face: "img/chars/roxy/roxy_portrait.jpg",
dialogClass: "roxy",
dailyReplayCount: 0,
maxDailyReplays: 2,
refusalLines: {
capHit: [
"Honey, I'm all out of charm for one day. The meter's run dry.",
"I dance for a living. Even I clock out. Come back tomorrow.",
"You've had your fun. A girl needs to rest her feet.",
"Twice? You're worse than my regulars. Beat it, sweetheart."
],
wrongMoment: [
"Wrong time, wrong place, sugar.",
"Not now. I'm working — or trying to.",
"Catch me at the club. Or don't. Your call.",
"I'm not in the mood to perform right now."
]
},
weeklySchedule: {
"Monday": { "VelvetCurtain": { start: 20, end: 2, lines: ["Welcome to the Velvet Curtain. Enjoy the show.", "Another night, another dollar.", "Buy a girl a drink?"] }, "ApartmentRoxy": { start: 4, end: 12, lines: ["Ugh, the sun. Let me sleep.", "You found my place. Persistent.", "Coffee's over there. Make yourself useful."] } },
"Tuesday": { "VelvetCurtain": { start: 20, end: 2, lines: ["Slow night. Story of my life.", "You again? You must be lonely.", "The music's giving me a headache."] }, "ApartmentRoxy": { start: 4, end: 12, lines: ["Still recovering from last night.", "Don't talk too loud.", "Make yourself at home, I guess."] } },
"Wednesday": { "ApartmentRoxy": { start: 13, end: 23, lines: ["My day off. Hallelujah.", "I'm binge-watching trash TV. Join me.", "It's nice having company that isn't... grabby."] } },
"Thursday": { "VelvetCurtain": { start: 20, end: 2, lines: ["The weekend's almost here. You can smell the desperation.", "Tips are better on Thursdays.", "You're becoming a regular, huh?"] }, "ApartmentRoxy": { start: 4, end: 12, lines: ["Everything hurts.", "A hot shower fixes most things.", "Just... let me wake up."] } },
"Friday": { "VelvetCurtain": { start: 20, end: 3, lines: ["Packed tonight. Great for business.", "Smile and wave, boys.", "A private dance? It'll cost you."] }, "ApartmentRoxy": { start: 4, end: 12, lines: ["Late night. Don't judge.", "I made bank, at least.", "Five more minutes of sleep."] } },
"Saturday": { "VelvetCurtain": { start: 20, end: 4, lines: ["Busiest night of the week. Let's get it over with.", "All these hungry looks.", "Hands to yourself, buddy."] }, "ApartmentRoxy": { start: 5, end: 13, lines: ["I deserve to sleep until noon.", "You brought breakfast? Marry me.", "Quiet. Please."] } },
"Sunday": { "ApartmentRoxy": { start: 12, end: 23, lines: ["My one real day off. Do not perceive me.", "I'm a blanket burrito today.", "Fine. You can stay. Be quiet."] } }
},
lastSetDay: null,
interactions: {
watchDance: { limit: 1, label: "Watch her dance", passage: "RoxyStageDance", requires: { location: ["VelvetCurtain"], notKeyEvent: "roxyDanceDone" } },
buyPrivate: { limit: 1, label: "Buy the private room ($40)", passage: "RoxyPrivateRoom", requires: { location: ["VelvetCurtain"], keyEvent: "roxyDanceDone", notKeyEvent: "roxyPrivateDone", notSameDay: true } },
buySex: { limit: 1, label: "Buy the rest of the night ($60)", passage: "RoxyChampagneSex", requires: { location: ["VelvetCurtain"], keyEvent: "roxyPrivateDone", notKeyEvent: "roxyChampagneDone", notSameDay: true } },
rainSet: { limit: 1, label: "Ask for the rain specialty ($80)", passage: "RoxyRainRoom", requires: { location: ["VelvetCurtain"], keyEvent: "roxyChampagneDone", notKeyEvent: "roxyRainDone", notSameDay: true } },
shareCab: { limit: 1, label: "Offer to share a cab", passage: "RoxyShareCab", requires: { location: ["VelvetCurtain"], keyEvent: "roxyChampagneDone", notKeyEvent: "roxyAddressKnown" } },
approach: { limit: 99, label: "Approach", passage: "ApproachRoxy" }
},
dailyInteractions: { watchDance: 0, buyPrivate: 0, buySex: 0, rainSet: 0, shareCab: 0, approach: 0, gift: 0 },
randomLines: [
"You got a light? No? Useless.",
"What's a clean-cut thing like you doing talking to me?",
"Don't get attached. I'm bad news.",
"Everyone wants something. What's your angle?",
"You're not the worst company I've had today.",
"Careful. People talk in this town."
],
},
// "chloe": {
// name: "Chloe",
// love: 0,
// lust: 0,
// corruption: 0,
// rivalry: 10,
// face: "img/chars/chloe/face/chloe_face.jpg",
// weeklySchedule: {
// "Monday": { "ParkTrail": { start: 7, end: 9, lines: ["Gotta get my morning run in, no matter what.", "Trying to beat my personal best today.", "You're either getting faster or I'm getting slower. Let's hope it's the first one."] }, "KitchenChloe": { start: 9, end: 10, lines: ["Oatmeal and a protein shake. Breakfast of champions.", "Fueling up for the day.", "It's not about taste, it's about macros."] }, "Gym": { start: 14, end: 16, lines: ["Working on my upper body today. Can't skip the small muscles.", "You here to lift or to watch?", "Don't get in my way, I'm in the zone."] }, "BedroomChloe": { start: 18, end: 7, lines: ["Studying. Even athletes have to hit the books.", "Just reviewing my training logs.", "I need to rest. Recovery is as important as the workout."] } },
// "Tuesday": { "ParkTrail": { start: 7, end: 9, lines: ["Interval training today. It's brutal, but effective.", "Feel the burn!", "Come on, keep up!"] }, "CoffeeShop": { start: 10, end: 12, lines: ["Just a black coffee. No sugar, no cream, no weakness.", "I'm meeting my coach here later.", "This is my one vice for the day."] }, "LivingRoomChloe": { start: 17, end: 21, lines: ["Stretching and foam rolling. It hurts so good.", "You gotta take care of your body if you want it to perform.", "Just watching some pro-athlete documentaries for motivation."] }, "BedroomChloe": { start: 21, end: 7, lines: ["Early to bed, early to rise. That's the motto.", "I need a solid eight hours.", "Goodnight. Don't be slow tomorrow."] } },
// "Wednesday": { "Gym": { start: 8, end: 10, lines: ["Leg day. Again. There's no escaping it.", "Squats, lunges, deadlifts. The holy trinity.", "I'm probably not going to be able to walk tomorrow."] }, "KitchenChloe": { start: 12, end: 13, lines: ["Refueling. Lots of protein, lots of carbs.", "Eating is part of the training.", "This tastes like victory."] }, "Library": { start: 14, end: 17, lines: ["I have a paper due. Even I have to study.", "It's so quiet in here. It's weird.", "I'm reading about kinesiology. It's actually pretty interesting."] }, "BedroomChloe": { start: 19, end: 7, lines: ["Just relaxing. My legs feel like jelly.", "I'm probably just going to pass out.", "See ya."] } },
// "Thursday": { "ParkTrail": { start: 7, end: 9, lines: ["A nice, easy recovery run today.", "Just getting the blood flowing.", "It's a beautiful morning for a run."] }, "CoffeeShop": { start: 10, end: 12, lines: ["Grabbing another coffee. Don't tell my coach.", "I like the smell of this place.", "Just people-watching. It's interesting."] }, "Gym": { start: 16, end: 18, lines: ["Back at it. Core work today.", "A strong core is the foundation of everything.", "Feel those abs burn!"] }, "BedroomChloe": { start: 20, end: 7, lines: ["Just chilling tonight. Listening to some pump-up music for tomorrow.", "Visualizing success.", "Time to rest up."] } },
// "Friday": { "Gym": { start: 9, end: 11, lines: ["Last hard workout of the week. Let's go!", "Pushing my limits today.", "No pain, no gain, right?"] }, "LivingRoomChloe": { start: 13, end: 16, lines: ["Just relaxing on the couch. I earned it.", "I might actually watch a movie that isn't about sports.", "It's nice to just do nothing for a change."] }, "Mall": { start: 17, end: 19, lines: ["I need new running shoes. These ones are getting worn out.", "Just browsing the sports stores.", "Maybe I'll get a new workout outfit too."] }, "BarRustyMug": { start: 21, end: 23, lines: ["My one cheat night of the week.", "Just having a light beer with some friends.", "Don't tell anyone you saw me here!"] }, "BedroomChloe": { start: 23, end: 8, lines: ["What a week. I'm beat.", "Time to crash.", "Goodnight."] } },
// "Saturday": { "ParkTrail": { start: 9, end: 11, lines: ["A long, slow run to kick off the weekend.", "This is more for my head than for my body.", "The park is so nice on Saturdays."] }, "KitchenChloe": { start: 12, end: 14, lines: ["Making a big post-run brunch.", "I'm starving!", "Pancakes. I earned these pancakes."] }, "PoolLuxury": { start: 15, end: 18, lines: ["My friend Cassandra let me use her pool. It's amazing.", "Just doing some light swimming. It's good for recovery.", "This is the life."] }, "BedroomChloe": { start: 20, end: 8, lines: ["Just watching some TV and relaxing.", "I should probably go to bed early, but it's Saturday.", "What a good day."] } },
// "Sunday": { "LivingRoomChloe": { start: 10, end: 14, lines: ["Lazy Sunday. Just lounging and reading a magazine.", "It's nice to have a day with no training schedule.", "I'm not moving from this couch."] }, "ParkLakeBench": { start: 15, end: 17, lines: ["Just enjoying the view and the fresh air.", "It's so peaceful here.", "A good place to think."] }, "KitchenChloe": { start: 18, end: 20, lines: ["Making a healthy dinner to get ready for the week.", "Meal prep Sunday!", "It's not glamorous, but it's necessary."] }, "BedroomChloe": { start: 20, end: 7, lines: ["Getting my gear ready for my morning run.", "The week starts now, really.", "Time to get some sleep."] } }
// },
// interactions: { "talk": { limit: 3, stats: { love: 2, rivalry: -1 }, passage: "ChloeTalk" }, "flirt": { limit: 2, stats: { love: 1, lust: 4, rivalry: 1 }, passage: "ChloeFlirt" }, "challenge": { limit: 1, stats: { love: 3, lust: 2, rivalry: 3 }, passage: "ChloeChallenge", requires: { location: ["ParkTrail", "Gym", "ParkCourts"] } } },
// dailyInteractions: { talk: 0, flirt: 0, challenge: 0 }
// },
// "cassandra": {
// name: "Cassandra",
// love: 0,
// lust: 0,
// corruption: 0,
// respect: 0,
// face: "img/chars/cassandra/face/cassandra_face.jpg",
// weeklySchedule: {
// "Monday": { "Gym": { start: 8, end: 12, lines: ["Alright, listen up! Form is everything!", "Stop slacking! I want to see you sweat!", "Did you come here to work out or to socialize?"] }, "KitchenCassandra": { start: 13, end: 14, lines: ["Fueling the machine. Chicken and rice.", "You are what you eat. Don't be cheap, easy, or fast.", "Hydration is not a suggestion, it's a command."] }, "Gym": { start: 15, end: 19, lines: ["Now it's my turn. Don't get in my way.", "This is where I build my temple.", "Pain is just weakness leaving the body. Embrace it."] }, "BedroomCassandra": { start: 21, end: 7, lines: ["My body needs to recover. Do not disturb.", "Sleep is part of the training regimen.", "Goodnight. Be stronger tomorrow."] } },
// "Tuesday": { "PoolLuxury": { start: 8, end: 10, lines: ["Morning laps. It's a full-body workout.", "The water provides perfect resistance.", "This is how you start a day with power."] }, "Gym": { start: 11, end: 18, lines: ["I have back-to-back clients today. It's going to be a long day.", "I live to push people past their limits.", "You want results? You have to earn them."] }, "LivingRoomCassandra": { start: 20, end: 22, lines: ["Reviewing my clients' progress. Some are disappointing.", "I'm designing a new workout plan.", "There is no room for excuses."] }, "BedroomCassandra": { start: 22, end: 7, lines: ["Exhausted. But it's a good kind of exhausted.", "Time to rest and rebuild.", "See you at the gym."] } },
// "Wednesday": { "Gym": { start: 9, end: 13, lines: ["Let's go, let's go, let's go! Move it!", "Your body can do more than your mind thinks it can. Prove it.", "Are you going to cry? Good. Crying means you're trying."] }, "Mall": { start: 14, end: 16, lines: ["I need new workout gear. The best, of course.", "Function over fashion. But a little fashion doesn't hurt.", "Just picking up some more supplements."] }, "Gym": { start: 17, end: 20, lines: ["A quick evening session. No days off.", "The iron never lies.", "This is my church."] }, "BedroomCassandra": { start: 22, end: 7, lines: ["Another productive day. Satisfying.", "My muscles are sore. I love it.", "Goodnight."] } },
// "Thursday": { "Gym": { start: 8, end: 12, lines: ["Alright, maggots! Time to work!", "I don't care if you're tired. Your muscles don't care.", "Give me ten more! Now!"] }, "KitchenCassandra": { start: 13, end: 14, lines: ["Another perfectly balanced meal.", "Abs are made in the kitchen, not just the gym.", "This is the fuel for greatness."] }, "Gym": { start: 15, end: 19, lines: ["Time for me to blow off some steam.", "Lifting heavy shit is my therapy.", "Don't bother me unless you're on fire."] }, "BedroomCassandra": { start: 21, end: 7, lines: ["I need to sleep. Growth happens when you rest.", "Dream of your goals.", "Dismissed."] } },
// "Friday": { "Gym": { start: 9, end: 14, lines: ["Last chance to prove yourself this week. Don't disappoint me.", "The weekend is for the weak.", "Finish strong!"] }, "PoolLuxury": { start: 15, end: 17, lines: ["A relaxing swim to stretch out my muscles.", "The water feels good after a hard week.", "Just enjoying the quiet."] }, "BarGildedLily": { start: 20, end: 23, lines: ["Some of my high-paying clients come here. It's good for business.", "I'll have a vodka soda. Clean and efficient.", "I'm just observing. Analyzing weaknesses."] }, "BedroomCassandra": { start: 23, end: 8, lines: ["The weekend officially begins now. Which means I plan my workouts.", "Rest up. You'll need it.", "Goodnight."] } },
// "Saturday": { "Gym": { start: 10, end: 15, lines: ["The weekend warriors are here. Pathetic.", "I'm here to work, not to play.", "You want to train on a Saturday? That shows dedication. I respect that."] }, "LivingRoomCassandra": { start: 17, end: 22, lines: ["Watching old bodybuilding competitions. The golden era.", "Arnold was a god.", "This is what true dedication looks like."] }, "BedroomCassandra": { start: 22, end: 8, lines: ["A quiet Saturday night. Perfect.", "I'm going to bed early. Big day tomorrow.", "Dismissed."] } },
// "Sunday": { "GardenLuxury": { start: 10, end: 12, lines: ["Outdoor yoga. It's good to connect with nature.", "Flexibility is a form of strength.", "The sun on my skin feels amazing."] }, "PoolLuxury": { start: 13, end: 16, lines: ["Just relaxing by the pool today. Even I need a rest day.", "Reading a book on anatomy.", "It's a beautiful day."] }, "LivingRoomCassandra": { start: 17, end: 21, lines: ["Planning the week ahead. Every workout, every meal.", "Success doesn't happen by accident. It's planned.", "I am in control."] }, "BedroomCassandra": { start: 21, end: 7, lines: ["The calm before the storm.", "Time to get my mind right for the week.", "Goodnight. Be ready to work."] } }
// },
// interactions: { "talk": { limit: 2, stats: { love: 1, respect: 1 }, passage: "CassandraTalk" }, "flirt": { limit: 1, stats: { lust: 3, respect: -1 }, passage: "CassandraFlirt" }, "askForTraining": { limit: 1, stats: { love: 2, lust: 2, respect: 3 }, passage: "CassandraAskTraining", requires: { location: ["Gym"] } } },
// dailyInteractions: { talk: 0, flirt: 0, askForTraining: 0 }
// "roxy": {
// name: "Roxy",
// love: 0,
// lust: 15,
// corruption: 30,
// trust: 0,
// face: "img/chars/roxy/face/roxy_face.jpg",
// dialogClass: "roxy",
// dailyReplayCount: 0,
// maxDailyReplays: 2,
// weeklySchedule: {
// "Monday": { "BedroomRoxy": { start: 12, end: 18, lines: ["Ugh, the sun... it burns. Let me sleep.", "What do you want? I'm trying to recover.", "Five more minutes... or five more hours."] }, "KitchenRoxy": { start: 18, end: 19, lines: ["Coffee. Black. Now.", "Breakfast of champions: leftover takeout and regret.", "I need caffeine to function."] }, "VelvetCurtainClub": { start: 20, end: 2, lines: ["Welcome to the Velvet Curtain. Enjoy the show.", "Another night, another dollar.", "Want a dance? It'll cost you."] }, "BedroomRoxy": { start: 2, end: 12, lines: ["Finally, home. The smell of cheap perfume and desperation is hard to wash off.", "I'm exhausted. Don't talk to me.", "Just let me sleep."] } },
// "Tuesday": { "BedroomRoxy": { start: 12, end: 17, lines: ["I think I'm still drunk from Saturday.", "Just watching some TV. Something mindless.", "Leave me to my misery."] }, "CoffeeShop": { start: 17, end: 18, lines: ["Just trying to feel like a normal person for an hour.", "This coffee is too expensive, but at least it's not in a strip club.", "Please don't tell anyone you saw me here."] }, "VelvetCurtainClub": { start: 20, end: 2, lines: ["It's a slow Tuesday. Great.", "You again? You must be lonely.", "The music is giving me a headache."] }, "BedroomRoxy": { start: 2, end: 12, lines: ["Another night, another layer of glitter I'll never get rid of.", "My feet are killing me.", "I need a drink. A real one."] } },
// "Wednesday": { "BedroomRoxy": { start: 13, end: 19, lines: ["My day off. Hallelujah.", "I'm not leaving this bed today. It's a sacred space.", "Don't even think about asking me to do anything."] }, "LivingRoomRoxy": { start: 19, end: 23, lines: ["I'm binge-watching some trashy reality show. It's my therapy.", "These people's lives are more messed up than mine. It's comforting.", "Want some popcorn?"] }, "BedroomRoxy": { start: 23, end: 13, lines: ["What a glorious day of doing nothing.", "I feel almost human again.", "Time to sleep for a thousand years."] } },
// "Thursday": { "BedroomRoxy": { start: 12, end: 18, lines: ["Ugh, it's Thursday already? The week is a blur.", "Just trying to mentally prepare for work tonight.", "I should probably clean this place. Nah."] }, "LocalStore": { start: 18, end: 19, lines: ["Just grabbing some essentials. Microwave dinners and energy drinks.", "Skylar is always so cheerful. It's unnerving.", "Don't judge my shopping cart."] }, "VelvetCurtainClub": { start: 20, end: 2, lines: ["The weekend is almost here. You can feel the desperation in the air.", "The tips are usually better on Thursdays.", "You're becoming a regular, huh?"] }, "BedroomRoxy": { start: 2, end: 12, lines: ["My back hurts, my head hurts, everything hurts.", "I need a hot shower. Or a vat of acid.", "Just leave me to die."] } },
// "Friday": { "BedroomRoxy": { start: 12, end: 17, lines: ["It's Friday. The start of the long haul.", "Just trying to conserve my energy for tonight.", "I should have been a librarian."] }, "LivingRoomRoxy": { start: 17, end: 19, lines: ["Putting on my 'work' face. It's all an act, you know.", "A little bit of makeup, a lot of fake smiles.", "Almost showtime."] }, "VelvetCurtainClub": { start: 20, end: 3, lines: ["It's packed tonight. Great for business, terrible for my sanity.", "Smile and wave, boys. Smile and wave.", "You want a private dance? It'll cost you extra on a Friday."] }, "BedroomRoxy": { start: 3, end: 12, lines: ["I smell like a brewery and a perfume factory exploded.", "I'm too tired to even take my makeup off.", "Just... darkness."] } },
// "Saturday": { "BedroomRoxy": { start: 13, end: 18, lines: ["I feel like death warmed over. But it's Saturday, the money night.", "Just trying to eat something that isn't from a vending machine.", "I need more coffee. All of the coffee."] }, "KitchenRoxy": { start: 18, end: 19, lines: ["Trying to cook a real meal. It's probably going to end in disaster.", "How do you even... what's a 'mirepoix'?", "Okay, I'm ordering pizza."] }, "VelvetCurtainClub": { start: 20, end: 4, lines: ["The busiest night of the week. Let's get this over with.", "All these guys... they all have the same hungry look.", "Keep your hands to yourself, buddy."] }, "BedroomRoxy": { start: 4, end: 13, lines: ["I made bank tonight. But at what cost?", "My feet are literally bleeding.", "I'm never getting out of this bed again."] } },
// "Sunday": { "BedroomRoxy": { start: 14, end: 2, lines: ["My one day of true rest. Do not speak to me. Do not look at me. Do not perceive me.", "I am a blanket burrito, and I will not be disturbed.", "Just... silence. Please."] }, "BedroomRoxy": { start: 2, end: 14, lines: ["Still sleeping. Go away.", "I'm hibernating.", "What part of 'do not disturb' did you not understand?"] } }
// },
// interactions: { "talk": { limit: 2, stats: { love: 1, trust: 1 }, passage: "RoxyTalk" }, "flirt": { limit: 3, stats: { lust: 2 }, passage: "RoxyFlirt" }, "approach": { limit: 99, stats: {}, passage: "ApproachRoxy" } },
// dailyInteractions: { talk: 0, flirt: 0, approach: 0, gift: 0 }
// },
// "Lena": {
// name: "Lena",
// love: 0,
// lust: 0,
// corruption: 0,
// face: "img/chars/brandi/face/brandi_face.jpg",
// weeklySchedule: {
// "Monday": {
// "ParkTrail": { start: 18, end: 22, lines: ["Ugh, do you mind? I'm trying to focus on my glutes.", "I pay a premium for this gym to avoid... distractions.", "Don't stare. It's rude."] },
// "LivingRoomBrandi": { start: 13, end: 16, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
// "PoolBrandi": { start: 16, end: 18, lines: ["This is a private pool, not a public one.", "The water is perfectly heated. Don't ruin the temperature.", "I hope you're not planning on getting in."] },
// "BedroomBrandi": { start: 22, end: 6, lines: ["Get out. Now.", "This is my sanctuary. You're trespassing.", "Do I need to call security?"] }
// },
// "Friday": {
// "LivingRoomBrandi": { start: 18, end: 22, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
// "KitchenBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomGuestBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BathroomBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "GardenBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "PoolBrandi": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "LivingRoomJenna": { start: 18, end: 22, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
// "KitchenJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BathroomJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "GardenJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "PoolJenna": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "LivingRoomValerie": { start: 18, end: 22, lines: ["My decorator is coming later, so please don't mess up the feng shui.", "I'm meditating on my stock portfolio. It's more complex than your life.", "Could you be a little quieter? I can hear you breathing from here."] },
// "KitchenValerie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomValerie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BedroomKenzie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "BathroomValerie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "PoolValerie": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "ParkTrail": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "ParkLakeBench": { start: 18, end: 22, lines: ["I'm planning my weekend. It's very exclusive.", "Should I go to the yacht party or the charity gala? Such difficult choices.", "I need to get my nails done before tonight."] },
// "PoolBrandi": { start: 15, end: 17, lines: ["A pre-evening dip is essential.", "Can you see any imperfections? No? Good.", "I'm visualizing world peace. Or a new diamond bracelet. Same thing."] },
// "BarGildedLily": { start: 20, end: 23, lines: ["Look at this place. Full of wannabes.", "My husband should be here. He's... busy.", "Another one? Don't mind if I do. It's on his credit card."] }
// }
// },
// interactions: { "talk": { limit: 2, stats: { love: 1, lust: 1, corruption: 1 }, passage: "BrandiTalk" }, "flirt": { limit: 1, stats: { love: 2, lust: 3, corruption: 2 }, passage: "BrandiFlirt" } },
// dailyInteractions: { talk: 0, flirt: 0 }
// },
}>>
<<set $randomEncounters to {
// "parkJogger": {
// name: "Jessica",
// face: "img/chars/random/jessica_face.jpg",
// lines: [
// "Ugh, have you seen a tiny white earbud anywhere around here? I think it fell out.",
// "Oh, hey! Sorry, I'm just looking for something I dropped. Don't mind me.",
// "I swear, if I lost another one of these things... Can I help you?"
// ],
// missions: {
// "findLostEarbud": {
// name: "Find Lost Earbud",
// status: 0,
// location: "ParkTrail",
// passage: "JessicaFindEarbud",
// day: ["Monday", "Wednesday", "Friday"],
// period: ["morning"],
// requirements: { type: "stats", intelligence: 10 }
// }
// },
// scenes: {
// "parkGratitude": {
// name: "Park Gratitude",
// status: 0,
// location: "ParkLakeBench",
// passage: "JessicaParkThanks",
// day: ["Monday", "Wednesday", "Friday"],
// period: ["morning", "noon"],
// requirements: { type: "mission", id: "findLostEarbud" }
// }
// }
// },
"gymGirl": {
name: "Tiffany",
face: "img/chars/random/tiffany_face.jpg",
dialogClass: "tiffany",
lust: 0,
love: 0,
dailyReplayCount: 0,
maxDailyReplays: 2,
haunt: { location: "Gym", start: 14, end: 20 },
refusalLines: {
capHit: [
"Bro, again? Save some for the cardio.",
"Already pumped twice today. I need a protein shake, not another set.",
"You're sweet, but I'm tapped. Catch me at the gym tomorrow.",
"Easy there, gym rat. I've gotta stretch, not flex."
],
wrongMoment: [
"Not the place, dude. Locker room talk only.",
"I'm hitting the bag. Maybe later.",
"Wrong vibe. I'm in workout mode.",
"Catch me at the gym, not here."
]
},
interactions: { "approach": { limit: 99, stats: {}, passage: "ApproachTiffany" } },
dailyInteractions: { approach: 0, gift: 0 },
lines: [
"Hey, could you do me a huge favor and spot me on this next set? My usual partner bailed.",
"Whew! Trying for a new personal record here. You look strong, could you give me a spot?",
"Excuse me, I need a spotter. You look like you know your way around a bench. Interested?"
],
missions: {
"spotHerBenchPress": {
name: "Spot Her Bench Press",
status: 0,
location: "Gym",
passage: "TiffanySpotMe",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
requirements: { type: "stats", strength: 15 }
}
},
scenes: {
"lockerRoomFun": {
name: "Locker Room 'Fun'",
status: 0,
location: "FemaleLockerRoom",
passage: "TiffanyLockerRoom",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
requirements: { type: "mission", id: "TiffanySpotMe" }
}
}
},
"fittingRoomGirl": {
name: "Paige",
face: "img/chars/paige/sumiko_portrait.jpg",
dialogClass: "paige",
lust: 10,
love: 0,
dailyReplayCount: 0,
maxDailyReplays: 2,
haunt: { location: "MallClothing", start: 10, end: 18 },
refusalLines: {
capHit: [
"I have to get home. My husband is waiting.",
"Once was insane. Twice in one day? I can't.",
"Don't text. Don't follow me. I have to go."
],
wrongMoment: [
"Not here. Not with people walking past.",
"I was just picking a dress. Don't make it a scene.",
"Later. Maybe. If the store is empty."
]
},
interactions: { "approach": { limit: 99, stats: {}, passage: "ApproachPaige" } },
dailyInteractions: { approach: 0, gift: 0 },
lines: [
"Does this even work for dinner? I have a date with my husband and I cannot decide.",
"I keep putting things back. I need a second pair of eyes. A stranger's, even.",
"Don't laugh. I'm trying on clothes like it's a crisis."
],
missions: {
"fittingHelp": {
name: "Help Her Pick an Outfit",
status: 0,
location: "MallClothing",
passage: "PaigeFittingHelp",
day: ["Monday", "Wednesday", "Friday", "Saturday"],
period: ["afternoon", "evening"],
requirements: { type: "none" }
}
},
scenes: {
"fittingRoom": {
name: "Fitting Room",
status: 0,
location: "MallClothing",
passage: "PaigeFittingRoom",
day: ["Monday", "Wednesday", "Friday", "Saturday"],
period: ["afternoon", "evening"],
requirements: { type: "mission", id: "PaigeFittingHelp" }
}
}
},
"libraryGirl": {
name: "Fiona",
face: "img/chars/fiona/lexy_portrait.jpg",
dialogClass: "fiona",
lust: 8,
love: 0,
dailyReplayCount: 0,
maxDailyReplays: 2,
haunt: { location: "Library", start: 11, end: 17 },
refusalLines: {
capHit: [
"Shh. I have to actually study now.",
"The room is booked. Tomorrow.",
"Don't make the librarian notice us twice in one day."
],
wrongMoment: [
"Not while people are at the desk.",
"I'm looking for a book. That's all.",
"This is a library."
]
},
interactions: { "approach": { limit: 99, stats: {}, passage: "ApproachFiona" } },
dailyInteractions: { approach: 0, gift: 0 },
lines: [
"Sorry — I need that shelf. I can't quite reach.",
"Didn't mean to interrupt your reading. The book's too high.",
"Quiet room, right? I can still use it?"
],
missions: {
"highShelf": {
name: "Reach the High Shelf",
status: 0,
location: "Library",
passage: "FionaHighShelf",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
requirements: { type: "none" }
}
},
scenes: {
"libraryStacks": {
name: "Private Reading Room",
status: 0,
location: "Library",
passage: "FionaLibraryStacks",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
requirements: { type: "mission", id: "FionaHighShelf" }
}
}
},
"parkGirl": {
name: "Carmen",
face: "img/chars/carmen/hailey_portrait.jpg",
dialogClass: "carmen",
lust: 12,
love: 0,
dailyReplayCount: 0,
maxDailyReplays: 2,
haunt: { location: "ParkTrail", start: 7, end: 11 },
refusalLines: {
capHit: [
"My legs are done. Same trail tomorrow.",
"I already ran. I already... yeah. Later.",
"Don't make this a daily thing in public."
],
wrongMoment: [
"I'm in the middle of a run.",
"Not on the crowded path.",
"Keep moving. We'll see."
]
},
interactions: { "approach": { limit: 99, stats: {}, passage: "ApproachCarmen" } },
dailyInteractions: { approach: 0, gift: 0 },
lines: [
"Watch it — you almost took me out.",
"Trail's mine in the morning. Usually.",
"You run here too? Didn't see you until you hit me."
],
missions: {
"trailRun": {
name: "Trail Collision",
status: 0,
location: "ParkTrail",
passage: "CarmenTrailRun",
day: ["Monday", "Wednesday", "Friday", "Sunday"],
period: ["morning"],
requirements: { type: "none" }
}
},
scenes: {
"trailHookup": {
name: "Off the Path",
status: 0,
location: "ParkTrail",
passage: "CarmenTrailHookup",
day: ["Monday", "Wednesday", "Friday", "Sunday"],
period: ["morning"],
requirements: { type: "mission", id: "CarmenTrailRun" }
}
}
},
// "fightClubber": {
// name: "Rina",
// face: "img/chars/random/rina_face.jpg",
// lines: [
// "You look lost, pretty boy. This isn't the kind of place you stumble into by accident.",
// "You got the look of a fighter, or maybe just someone with a death wish. What do you want?",
// "First time here? Don't just stand there gawking. Either put some money down or get in the ring."
// ],
// missions: {
// "proveYourWorth": {
// name: "Prove Your Worth",
// status: 0,
// location: "WarehouseFightClub",
// passage: "RinaProveWorth",
// day: ["Friday", "Saturday"],
// period: ["night"],
// requirements: { type: "stats", strength: 20 }
// },
// "getTheGoods": {
// name: "Get The 'Goods'",
// status: 0,
// location: "GhettoAlley",
// passage: "RinaGetTheGoods",
// day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
// period: ["evening", "night"],
// requirements: { type: "mission", id: "proveYourWorth" }
// }
// },
// scenes: {
// "nakedSparring": {
// name: "Naked Sparring",
// status: 0,
// location: "WarehouseFightClub",
// passage: "RinaNakedSparring",
// day: ["Friday", "Saturday"],
// period: ["night"],
// requirements: { type: "mission", id: "getTheGoods" }
// }
// }
// },
// "lateNightStoner": {
// name: "Stacy",
// face: "img/chars/random/stacy_face.jpg",
// lines: [
// "Whoa, dude. You, like, appeared out of nowhere. Got a light by any chance?",
// "Hey... You're not a cop, are you? You have a weirdly... non-cop-like vibe. Maybe.",
// "Just enjoying the... you know... night air. It's so full of... air. You need something?"
// ],
// missions: {
// "findHerLighter": {
// name: "Find Her Lighter",
// status: 0,
// location: "ParkTrail",
// passage: "StacyFindLighter",
// day: ["Friday"],
// period: ["evening"],
// requirements: { "type": "none" }
// }
// },
// scenes: {}
// },
// "teste": {
// name: "Jessica",
// face: "img/chars/random/jessica_face.jpg",
// lines: [
// "Hey there... Are you lost?",
// "You look like you're looking for something. Or... someone?",
// "I know a shortcut through these woods, if you're interested."
// ],
// missions: {
// "findHerPussy": {
// name: "Find Her Pussy",
// status: 0,
// location: "ParkLakeBench",
// passage: "StacyFindLighter",
// day: ["Friday"],
// period: ["evening"],
// requirements: { "type": "none" }
// }
// },
// scenes: {}
// }
}>>
<<set $period to {
morning: { start: 6, end: 10, label: "Morning" },
noon: { start: 11, end: 13, label: "Noon" },
afternoon: { start: 14, end: 17, label: "Afternoon" },
evening: { start: 18, end: 21, label: "Evening" },
night: { start: 22, end: 5, label: "Night" }
}>>
<<set $days to ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]>>
<<set $actualDay to "Friday">>
<<set $time to 20>>
<<set $keyEvents to {
mainHouseProblemRevealed: false,
openWorldCarolCity: false,
linearWeekendActive: true
}>>
<<set $weekendPhase to "arrival">>
<<set $gameOverReason to "">>
<<set $events to {
"MothersCall": {
name: "Mother's Call",
status: 0,
location: "CarolHouse",
passage: "MotherCall",
period: "evening",
day: "Sunday",
character: "player",
stats:{},
requirements: { type: "scene", id: "EveningFarewellBJ" }
},
"CarolAgreesToStay": { /* Novo evento */
name: "Carol Agrees to Extended Stay",
status: 0,
location: "LivingRoom", /* Onde a conversa provavelmente ocorre */
passage: "TalkToCarolAboutStay",
period: "evening", /* Continuação do evento anterior */
day: "Sunday",
character: "auntCarol", /* Interação principal com Carol */
stats: { love: 15, caring_boost: 5 }, /* Carol ganha amor e um boost em 'caring' */
requirements: { type: "event", id: "MothersCall" } /* Requer que MothersCall tenha ocorrido */
},
"CityIntroductionByCarol": { /* NOVO EVENTO */
name: "Carol Explains City Life",
status: 0,
location: "Bedroom", /* Ocorre no quarto do jogador ao acordar */
passage: "CarolExplainsCityLife",
period: "morning",
day: "Monday", /* Ocorre na segunda-feira */
character: "auntCarol",
stats: { love: 5 }, /* Pequeno bônus por ela ser atenciosa */
requirements: { type: "event", id: "CarolAgreesToStay" } /* Requer que a estadia prolongada tenha sido acordada */
},
"LuckyDay": { /* NOVO EVENTO */
name: "Lucky Day",
status: 0,
location: "ParkLakeBench",
passage: "CarolExplainsCityLife",
period: "evening",
day: "Friday",
character: "auntCarol",
stats: { love: 5 },
requirements: { type: "none" }
}
}>>
<<set $dayNumber to 1>>
<<set $missions to {
"001": { name: "Arriving at Aunt Carol's", status: 0, location: "LivingRoom", passage: "Arrival", period: "evening", day: "Friday", character: "auntCarol", stats: { love: 5 }, requirements: { "type": "scene", "id": "Greeting" } },
"002": { name: "Wash Dishes", status: 0, location: "Kitchen", passage: "KitchenChores", period: ["morning", "noon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { love: 10, money: 10 }, requirements: { type: "mission", id: "Arrival" } },
"003": { name: "Clean Pool", status: 0, location: "Pool", passage: "PoolChores", period: ["morning", "noon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { love: 15, money: 20 }, requirements: { type: "mission", id: "KitchenChores" } },
"004": { name: "Tidy House", status: 0, location: "LivingRoom", passage: "LivingRoomChores", period: ["morning", "noon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { love: 10, money: 15 }, requirements: { type: "mission", id: "PoolChores" } },
"005": { name: "Delete Photos", status: 0, location: "BedroomCarol", passage: "DeletePhotos", period: ["noon","afternoon"], day: ["Saturday"], character: "auntCarol", stats: { love: 15, corruption: 5 }, requirements: { type: "scene", id: "Greeting" } },
"006": { name: "Wardrobe Help", status: 0, location: "BedroomCarol", passage: "WardrobeHelp", period: ["noon","afternoon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { love: 15, corruption: 10 }, requirements: { type: "mission", id: "DeletePhotos" } },
"007": {
name: "Aunt Carol's Request",
status: 0,
location: "LivingRoom",
passage: "AskPackagePickup",
period: "afternoon",
day: ["Saturday", "Sunday"],
character: "auntCarol",
stats: { love: 5 },
requirements: { type: "mission", id: "WardrobeHelp" }
},
"007.2": {
name: "Pick Up Carol's Package",
status: 0,
location: "LocalStore",
passage: "StorePackagePickup",
period: "afternoon",
day: ["Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 3 },
requirements: { type: "mission", id: "AskPackagePickup" }
},
"007.3": {
name: "Deliver Package to Carol",
status: 0,
location: "LivingRoom",
passage: "DeliverPackage",
period: "afternoon",
day: ["Saturday", "Sunday"],
character: "auntCarol",
stats: { love: 15, money: 20, corruption: 5 },
requirements: { type: "mission", id: "StorePackagePickup", item: "CarolPackage" }
},
"008": {
name: "Clean Bathroom",
status: 0,
location: "Bathroom",
passage: "BathroomCleaning",
period: "afternoon",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 10, lust: 5, money: 10 },
requirements: { type: "mission", id: "DeliverPackage" }
},
"009": {
name: "Take Package to Angela",
status: 0,
location: "LivingRoom",
passage: "AskTakePackageToAngela",
period: "afternoon",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 5 },
requirements: { type: "mission", id: "BathroomCleaning" }
},
"010": {
name: "Deliver Package to Angela",
status: 0,
location: "AngelaHouse",
passage: "DeliverPackageToAngela",
period: "afternoon",
day: ["Saturday"],
character: "neighborAngela",
stats: { angela_love: 10, money: 10 },
requirements: { type: "mission", id: "AskTakePackageToAngela", item: "AngelaPackage" }
},
"011": {
name: "Confirm Delivery with Carol",
status: 0,
location: "LivingRoom",
passage: "ConfirmAngelaDelivery",
period: "afternoon",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 10 },
requirements: { type: "mission", id: "DeliverPackageToAngela" }
},
"012": {
name: "Wash Evening Dishes",
status: 0,
location: "Kitchen",
passage: "EveningDishes",
period: "evening",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 10, lust: 3 },
requirements: { type: "scene", id: "EveningWineProvocation" }
},
"013": {
name: "Find TV Remote",
status: 0,
location: "LivingRoom",
passage: "FindRemote",
period: "morning",
day: ["Sunday"],
character: "auntCarol",
stats: { love: 10, money: 5 },
requirements: { type: "scene", id: "MorningSurpriseTitsjob" }
},
"014": {
name: "Change Bedroom Lightbulb",
status: 0,
location: "BedroomCarol",
passage: "ChangeLightbulb",
period: "noon",
day: ["Sunday"],
character: "auntCarol",
stats: { love: 12, lust: 8, strength_xp: 5 },
requirements: { type: "mission", id: "FindRemote" }
},
"015": {
name: "Pack Your Bags",
status: 0,
location: "Bedroom",
passage: "PackBagsToGo",
period: "evening",
day: ["Sunday"],
character: "player",
stats: { energy: -5 },
requirements: { type: "scene", id: "SkylarStressForcedBJ" }
},
"016": {
name: "Help Angela Plant Flowers",
status: 0,
location: "AngelaHouseGarden",
passage: "HelpAngelaPlant",
period: "morning",
day: ["Sunday"],
character: "neighborAngela",
stats: { angela_love: 15, strength_xp: 5 },
requirements: { type: "mission", id: "DeliverPackageToAngela" }
},
"017": {
name: "Water Angela's Plants",
status: 0,
location: "AngelaHouseGarden",
passage: "WaterAngelaPlants",
period: "morning",
day: ["Sunday"],
character: "neighborAngela",
stats: { angela_love: 10 },
requirements: { type: "mission", id: "HelpAngelaPlant" }
},
"018": {
name: "Move Heavy Boxes for Skylar",
status: 0,
location: "LocalStore",
passage: "SkylarHeavyBoxes",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_love: 5, strength_xp: 10, money: 15 },
requirements: { type: "scene", id: "AngelaGardenThanksHJ" }
},
"019": {
name: "Organize Skylar's Stockroom",
status: 0,
location: "LocalStoreStock",
passage: "SkylarOrganizeStock",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_love: 7, intelligence_xp: 5, money: 10 },
requirements: { type: "mission", id: "SkylarHeavyBoxes" }
},
"020": {
name: "Fix Skylar's Register",
status: 0,
location: "LocalStore",
passage: "SkylarFixRegister",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, intelligence_xp: 7, money: 10 },
requirements: { type: "mission", id: "SkylarOrganizeStock" }
},
"021": {
name: "Skylar's 'Last' Delivery",
status: 0,
location: "LocalStore",
passage: "SkylarLastDeliveryRefusal",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_corruption: 10 },
requirements: { type: "scene", id: "SkylarChangingSpyScene" }
},
/* SKYLAR PHASE 2 MISSIONS */
"SM005": {
name: "Keys & Boundaries",
status: 0,
location: "ApartmentSkylar",
passage: "SkylarKeysBoundaries",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 12, skylar_lust: 4 },
requirements: { type: "keyEvent", id: "skylarAddressKnown" }
},
"SM006": {
name: "Closing Checklist",
status: 0,
location: "LocalStore",
passage: "SkylarClosingChecklist",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 15, skylar_lust: 3 },
requirements: { type: "scene", id: "SkylarStressForcedBJ" }
},
"SM007": {
name: "Stock Ghost",
status: 0,
location: "LocalStoreStock",
passage: "SkylarStockGhost",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 5 },
requirements: { type: "mission", id: "SkylarClosingChecklist" }
},
"SM008": {
name: "After the Till",
status: 0,
location: "LocalStore",
passage: "SkylarAfterTill",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 6, skylar_lust: 14, skylar_corruption: 6 },
requirements: { type: "mission", id: "SkylarStockGhost" }
},
"SM009": {
name: "Pool Gate Code",
status: 0,
location: "PoolComplexSkylar",
passage: "SkylarPoolCode",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 10, skylar_lust: 6 },
requirements: { type: "keyEvent", id: "skylarHomeWelcome" }
},
"SM010": {
name: "Stay Late",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarStayLate",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 12, skylar_corruption: 5 },
requirements: { type: "keyEvent", id: "skylarHomeWelcome" }
},
"SM011": {
name: "Spot Me Once",
status: 0,
location: "Gym",
passage: "SkylarSpotMeOnce",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 14, skylar_corruption: 8 },
requirements: { type: "scene", id: "SkylarPassionate" }
},
"SM012": {
name: "Late Fee Talk",
status: 0,
location: "LocalStore",
passage: "SkylarLateFee",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 5, skylar_lust: 10, skylar_corruption: 10 },
requirements: { type: "mission", id: "SkylarAfterTill" }
},
"SM013": {
name: "Out of Town",
status: 0,
location: "ApartmentSkylar",
passage: "SkylarOutOfTown",
period: ["evening"],
day: ["Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 10, skylar_lust: 12, skylar_corruption: 6 },
requirements: { type: "scene", id: "SkylarInstructionBJ" }
},
"SM014": {
name: "Robe Evening",
status: 0,
location: "BedroomSkylar",
passage: "SkylarRobeEvening",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 10, skylar_lust: 12 },
requirements: { type: "keyEvent", id: "skylarHomeWelcome" }
},
"SM015": {
name: "Mirror Check",
status: 0,
location: "BathroomSkylar",
passage: "SkylarMirrorCheck",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 8 },
requirements: { type: "mission", id: "SkylarRobeEvening" }
},
"SM016": {
name: "Steam & Trust",
status: 0,
location: "BathroomSkylar",
passage: "SkylarSteam",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 6, skylar_lust: 16, skylar_corruption: 8 },
requirements: { type: "mission", id: "SkylarMirrorCheck" }
},
"SM017": {
name: "Couch Rules",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarCouchRules",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 14, skylar_corruption: 6 },
requirements: { type: "mission", id: "SkylarStayLate" }
},
"SM018": {
name: "Pool Evening",
status: 0,
location: "PoolComplexSkylar",
passage: "SkylarPoolEvening",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 16, skylar_corruption: 10 },
requirements: { type: "keyEvent", id: "skylarAmenities" }
},
"SM019": {
name: "Golden Hour",
status: 0,
location: "BalconySkylar",
passage: "SkylarGoldenHour",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 8, skylar_lust: 12, skylar_corruption: 8 },
requirements: { type: "scene", id: "SkylarPassionate" }
},
"SM020": {
name: "Pearls Night",
status: 0,
location: "BedroomSkylar",
passage: "SkylarPearlsNight",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_love: 10, skylar_lust: 14, skylar_corruption: 8 },
requirements: { type: "scene", id: "SkylarPassionate" }
},
/* SKYLAR PHASE 2 MISSIONS END */
/* ANGELA PHASE 2 MISSIONS */
"AM005": {
name: "Front Door Rules",
status: 0,
location: "AngelaHouse",
passage: "AngelaFrontDoorRules",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 12, angela_lust: 6 },
requirements: { type: "scene", id: "AngelaGardenThanksHJ" }
},
"AM006": {
name: "Measure Twice",
status: 0,
location: "KitchenAngela",
passage: "AngelaMeasureTwice",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 8 },
requirements: { type: "mission", id: "AngelaFrontDoorRules" }
},
"AM007": {
name: "Taste Test",
status: 0,
location: "KitchenAngela",
passage: "AngelaTasteTest",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 10, angela_corruption: 4 },
requirements: { type: "mission", id: "AngelaMeasureTwice" }
},
"AM008": {
name: "Slice & Scroll",
status: 0,
location: "CityCenter",
passage: "AngelaSliceScroll",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 12 },
requirements: { type: "mission", id: "AngelaTasteTest" }
},
"AM009": {
name: "Make It Official",
status: 0,
location: "CityCenter",
passage: "AngelaMakeOfficial",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 14, angela_lust: 10, angela_corruption: 4 },
requirements: { type: "mission", id: "AngelaSliceScroll" }
},
"AM010": {
name: "Trail Prep",
status: 0,
location: "Park",
passage: "AngelaTrailPrep",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 4 },
requirements: { type: "mission", id: "AngelaMakeOfficial" }
},
"AM011": {
name: "Steep Climb",
status: 0,
location: "Park",
passage: "AngelaSteepClimb",
period: ["morning", "noon", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 10 },
requirements: { type: "mission", id: "AngelaTrailPrep" }
},
"AM012": {
name: "Summit Dare",
status: 0,
location: "Park",
passage: "AngelaSummitDare",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 14, angela_corruption: 6 },
requirements: { type: "mission", id: "AngelaSteepClimb" }
},
"AM013": {
name: "Weekend Splash",
status: 0,
location: "AngelaHouse",
passage: "AngelaWeekendSplash",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 10 },
requirements: { type: "mission", id: "AngelaSettlingIn" }
},
"AM014": {
name: "Sunscreen",
status: 0,
location: "PoolAngela",
passage: "AngelaSunscreen",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 14, angela_corruption: 6 },
requirements: { type: "mission", id: "AngelaWeekendSplash" }
},
"AM015": {
name: "Sunrise Cup",
status: 0,
location: "KitchenAngela",
passage: "AngelaSunriseCup",
period: ["morning"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 12, angela_lust: 8 },
requirements: { type: "keyEvent", id: "angelaOvernight" }
},
"AM016": {
name: "Soft Landing",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaSoftLanding",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 14, angela_corruption: 6 },
requirements: { type: "scene", id: "AngelaPOVBlowjob" }
},
"AM017": {
name: "Settling In",
status: 0,
location: "AngelaHouse",
passage: "AngelaSettlingIn",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 12, angela_lust: 4 },
requirements: { type: "mission", id: "AngelaTasteTest" }
},
"AM018": {
name: "Guest Towels",
status: 0,
location: "AngelaHouse",
passage: "AngelaGuestTowels",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 6 },
requirements: { type: "mission", id: "AngelaSettlingIn" }
},
"AM019": {
name: "Quiet Hours",
status: 0,
location: "AngelaHouse",
passage: "AngelaQuietHours",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 10, angela_corruption: 4 },
requirements: { type: "mission", id: "AngelaGuestTowels" }
},
"AM020": {
name: "Spare Key",
status: 0,
location: "AngelaHouse",
passage: "AngelaSpareKey",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 16, angela_lust: 8 },
requirements: { type: "scene", id: "AngelaCurves" }
},
"AM021": {
name: "Night Watering",
status: 0,
location: "AngelaHouseGarden",
passage: "AngelaNightWatering",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 8, angela_lust: 10, angela_corruption: 6 },
requirements: { type: "mission", id: "AngelaFrontDoorRules" }
},
"AM022": {
name: "Carol's Lights",
status: 0,
location: "AngelaHouseGarden",
passage: "AngelaCarolsLights",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 6, angela_lust: 8, angela_corruption: 8 },
requirements: { type: "mission", id: "AngelaNightWatering" }
},
"AM023": {
name: "Who Holds the Gloves",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaWhoHoldsGloves",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_love: 10, angela_lust: 10 },
requirements: { type: "mission", id: "AngelaSoftLanding" }
},
"AM024": {
name: "House Rules",
status: 0,
location: "BedroomAngela",
passage: "AngelaHouseRules",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 12, angela_corruption: 10 },
requirements: { type: "keyEvent", id: "angelaDommePath" }
},
/* ANGELA PHASE 2 MISSIONS END */
/**************************************************/
/************ AUNT CAROL - MONTH LONG *************/
/**************************************************/
/*
----------------------------------------------------
FASE 1: A NOVA REALIDADE E A BARREIRA DO TABU (Semana 1)
Foco na culpa de Carol e na redefinição de limites.
A intimidade é hesitante e surge de momentos de fraqueza.
----------------------------------------------------
*/
"CM015": {
name: "Unpack for the Month",
status: 0,
location: "Bedroom",
passage: "CarolMonthUnpack",
period: "morning",
day: ["Monday"],
character: "auntCarol",
stats: { love: 5, energy: -10 },
requirements: { type: "scene", id: "EveningFarewellBJ" } // Continua do final do fim de semana
},
"CM016": {
name: "Get the Shopping List",
status: 0,
location: "Kitchen",
passage: "CarolShoppingList",
period: ["morning", "noon"],
day: ["Monday"],
character: "auntCarol",
stats: { love: 5 },
requirements: { type: "mission", id: "CarolMonthUnpack" }
},
"CM017": {
name: "The Weekly Grocery Run",
status: 0,
location: "LocalStore",
passage: "CarolGroceryRun",
period: ["morning", "noon"],
day: ["Monday"],
character: "storeSkylar",
stats: { money: 50, skylar_love: 2 },
requirements: { type: "mission", id: "CarolShoppingList", item: "ShoppingList" }
},
"CM018": {
name: "Fix the Leaky Faucet",
status: 0,
location: "Bathroom",
passage: "CarolFixFaucet",
period: "afternoon",
day: ["Monday", "Tuesday"],
character: "auntCarol",
stats: { love: 10, intelligence_xp: 5, money: 15 },
requirements: { type: "scene", id: "CarolTenseDinner" }
},
"CM019": {
name: "Movie Night Choice",
status: 0,
location: "LivingRoom",
passage: "CarolMovieNight",
period: "evening",
day: ["Wednesday"],
character: "auntCarol",
stats: { love: 7 },
requirements: { type: "scene", id: "CarolFirstRelapseBJ" }
},
"CM020": {
name: "Help Angela with her Roses",
status: 0,
location: "AngelaHouseGarden",
passage: "CarolHelpAngelaRoses",
period: "afternoon",
day: ["Thursday"],
character: "neighborAngela",
stats: { angela_love: 10 },
requirements: { type: "mission", id: "CarolMovieNight" }
},
/*
----------------------------------------------------
FASE 2: ACEITAÇÃO E EXPLORAÇÃO (Semana 1-2)
A culpa diminui. A relação sexual secreta torna-se uma
parte aceita da rotina. Culmina na primeira vez.
----------------------------------------------------
*/
"CM021": {
name: "Clean the Pool Together",
status: 0,
location: "Pool",
passage: "CarolCleanPoolTogether",
period: "noon",
day: ["Friday"],
character: "auntCarol",
stats: { love: 10, lust: 15 },
requirements: { type: "scene", id: "CarolThankYouBJ" }
},
"CM022": {
name: "Cooking Dinner Together",
status: 0,
location: "Kitchen",
passage: "CarolCookingTogether",
period: "evening",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 15, lust: 10 },
requirements: { type: "scene", id: "CarolPoolsideFunBJ" }
},
"CM023": {
name: "Laundry Day",
status: 0,
location: "LivingRoom", // Assuming laundry area is near
passage: "CarolLaundryDay",
period: "morning",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 10, corruption: 5 },
requirements: { type: "scene", id: "CarolFirstVaginal" }
},
/*
----------------------------------------------------
FASE 3: A RELAÇÃO SECRETA (Semana 2-3)
O sexo agora é uma parte estabelecida e explorada da
relação. Foco em diferentes dinâmicas e intimidade.
----------------------------------------------------
*/
"CM024": {
name: "Fix Carol's Slow Computer",
status: 0,
location: "LivingRoom",
passage: "CarolFixComputer",
period: "afternoon",
day: ["Monday"],
character: "auntCarol",
stats: { love: 10, intelligence_xp: 7 },
requirements: { type: "scene", id: "CarolAfternoonDelight" }
},
"CM025": {
name: "Learn to Make Her Favorite Cocktail",
status: 0,
location: "Kitchen",
passage: "CarolMakeCocktail",
period: "evening",
day: ["Tuesday"],
character: "auntCarol",
stats: { love: 15, charisma_xp: 5 },
requirements: { type: "scene", id: "CarolRomanticNight" }
},
/*
----------------------------------------------------
FASE 4: O TABU FINAL (Semana 3-4)
A relação atinge o pico de confiança, abrindo
caminho para a exploração do tabu final.
----------------------------------------------------
*/
"CM026": {
name: "A Massage for a Tense Aunt",
status: 0,
location: "BedroomCarol",
passage: "CarolTenseMassage",
period: "evening",
day: ["Wednesday"],
character: "auntCarol",
stats: { love: 20, lust: 25 },
requirements: { type: "scene", id: "CarolRidingCreampie" }
},
/* BRANDI MISSIONS */
"BM001": {
name: "Brandi's Garden Statue",
status: 0,
location: "GardenBrandi",
passage: "BrandiStatueAccident",
period: ["morning", "noon"],
day: ["Saturday"],
character: "brandi",
stats: { brandi_love: -10 },
requirements: { type: "none" }
},
"BM002": {
name: "Work off Debt: Pool Boy",
status: 0,
location: "PoolBrandi",
passage: "BrandiPoolDebt",
period: ["noon", "afternoon"],
day: ["Saturday"],
character: "brandi",
stats: { strength_xp: 5, brandi_corruption: 2 },
requirements: { type: "mission", id: "BrandiStatueAccident" }
},
"BM003": {
name: "Work off Debt: Car Wash",
status: 0,
location: "GardenBrandi",
passage: "BrandiCarWashDebt",
period: ["morning"],
day: ["Sunday"],
character: "brandi",
stats: { strength_xp: 5, brandi_corruption: 3 },
requirements: { type: "mission", id: "BrandiPoolDebt" }
},
"BM004": {
name: "An Inside Job",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiDustingDuty",
period: ["afternoon"],
day: ["Sunday"],
character: "brandi",
stats: { intelligence_xp: 5 },
requirements: { type: "mission", id: "BrandiCarWashDebt" }
},
"BM005": {
name: "The First Piece of Leverage",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiLeverageConfrontation",
period: ["afternoon", "evening"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 10, brandi_lust: 5 },
requirements: { type: "scene", id: "BrandiOverheardCall" }
},
"BM006": {
name: "A Test of Discretion",
status: 0,
location: "GardenBrandi",
passage: "BrandiDisposeOfLetter",
period: ["evening"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 5, player_charisma: 2 },
requirements: { type: "mission", id: "BrandiLeverageConfrontation" }
},
"BM007": {
name: "Find the Lady's Key",
status: 0,
location: "BedroomBrandi",
passage: "BrandiSearchForKey",
period: ["night"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_lust: 15, jenna_loneliness: -10, intelligence_xp: 5 },
requirements: { type: "scene", id: "BrandiLetterDisposed" }
},
"BM008": {
name: "Confront Brandi About the Debt",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiDebtReveal",
period: ["afternoon", "evening"],
day: ["Saturday", "Sunday"],
character: "brandi",
stats: { brandi_corruption: 5 },
requirements: { type: "scene", id: "BrandiOverheardCall" }
},
/* BRANDI MISSIONS END */
/* VALERIE MISSIONS START */
"VM001": {
name: "Help with Valerie's Garden",
status: 0,
location: "GardenValerie",
passage: "ValerieFixGarden",
period: ["morning", "noon"],
day: ["Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 10, strength_xp: 5 },
requirements: { type: "none" }
},
"VM002": {
name: "Move Valerie's Canvas",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieMoveCanvas",
period: ["afternoon"],
day: ["Saturday"],
character: "valerie",
stats: { valerie_love: 12, strength_xp: 5 },
requirements: { type: "scene", id: "ValerieYogaSessionGlimpse" }
},
"VM003": {
name: "Retrieve a Lost Crystal",
status: 0,
location: "PoolValerie",
passage: "ValerieFindCrystal",
period: ["noon", "afternoon"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_love: 15, intelligence_xp: 5 },
requirements: { type: "scene", id: "ValerieChakraCheckupHJ" }
},
"VM004": {
name: "Cleansing the Space",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieHouseCleansing",
period: ["afternoon"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_love: 15, valerie_corruption: 5 },
requirements: { type: "scene", id: "ValerieChakraCheckupHJ" }
},
/* Phase 2 — after VS007 Primal Energy BJ */
"VM005": {
name: "Clear the Living Room",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieHouseFlow",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 12, valerie_lust: 5 },
requirements: { type: "scene", id: "ValeriePrimalEnergyBJ" }
},
"VM006": {
name: "Help in the Kitchen",
status: 0,
location: "KitchenValerie",
passage: "ValerieKitchenHeat",
period: ["noon", "afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 10, valerie_lust: 10, valerie_corruption: 3 },
requirements: { type: "mission", id: "ValerieHouseFlow" }
},
"VM007": {
name: "Help Set Up Her Bedroom",
status: 0,
location: "BedroomValerie",
passage: "ValerieThreshold",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 12, valerie_lust: 8 },
requirements: { type: "mission", id: "ValerieKitchenHeat" }
},
"VM008": {
name: "Help Her Choose an Outfit",
status: 0,
location: "BedroomValerie",
passage: "ValerieColorRitual",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 10, valerie_lust: 12, valerie_corruption: 5 },
requirements: { type: "mission", id: "ValerieThreshold" }
},
"VM009": {
name: "An Honest Look",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieRawFrequency",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 15, valerie_corruption: 10, valerie_love: 5 },
requirements: { type: "mission", id: "ValerieColorRitual" }
},
"VM010": {
name: "Something Left in the Bathroom",
status: 0,
location: "BathroomValerie",
passage: "ValeriePrivateTools",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 12, valerie_corruption: 8, valerie_love: 5 },
requirements: { type: "mission", id: "ValerieRawFrequency" }
},
"VM011": {
name: "Poolside Afternoon",
status: 0,
location: "PoolValerie",
passage: "ValerieWaterOffering",
period: ["noon", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 15, valerie_lust: 12, valerie_corruption: 5 },
requirements: { type: "mission", id: "ValeriePrivateTools" }
},
"VM012": {
name: "Steam in the Hall",
status: 0,
location: "BathroomValerie",
passage: "ValerieSteamInvitation",
period: ["morning", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 8, valerie_lust: 10 },
requirements: { type: "mission", id: "ValerieWaterOffering" }
},
"VM013": {
name: "Evening on the Mat",
status: 0,
location: "BedroomValerie",
passage: "ValerieAlignmentEvening",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_love: 15, valerie_lust: 15, valerie_corruption: 10 },
requirements: { type: "scene", id: "ValerieShowerSpy" }
},
/* VALERIE MISSIONS END */
/* KENZIE MISSIONS START */
"KM001": {
name: "A Favor for Kenzie",
status: 0,
location: "KitchenValerie",
passage: "KenziePizzaRequest",
period: ["evening"],
day: ["Tuesday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 10, kenzie_rebellion: 5 },
requirements: { type: "none" }
},
"KM002": {
name: "Keep Kenzie's Secret",
status: 0,
location: "BarRustyMug",
passage: "KenzieBarEncounter",
period: ["evening", "night"],
day: ["Friday"],
character: "kenzie",
stats: { kenzie_love: 15, kenzie_corruption: 10, kenzie_rebellion: 10 },
requirements: { type: "scene", id: "KenzieGratitudeHJ" }
},
/* Phase 2 — after KS004 deepthroat ladder */
"KM003": {
name: "Spotter's Privilege",
status: 0,
location: "Gym",
passage: "KenzieSpotterPrivilege",
period: ["noon", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 8, kenzie_lust: 10, kenzie_corruption: 5 },
requirements: { type: "scene", id: "KenzieDeepthroatFacefuck" }
},
"KM004": {
name: "Booth for Two",
status: 0,
location: "CoffeeShop",
passage: "KenzieBoothForTwo",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 10, kenzie_lust: 5, kenzie_corruption: 3 },
requirements: { type: "mission", id: "KenzieSpotterPrivilege" }
},
"KM005": {
name: "Second Sitting",
status: 0,
location: "CoffeeShop",
passage: "KenzieSecondSitting",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 8, kenzie_lust: 6, kenzie_corruption: 4 },
requirements: { type: "mission", id: "KenzieBoothForTwo" }
},
"KM006": {
name: "Fair Lights",
status: 0,
location: "Mall",
passage: "KenzieFairLights",
period: ["afternoon", "evening"],
day: ["Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 10, kenzie_lust: 8, kenzie_corruption: 5 },
requirements: { type: "mission", id: "KenzieSecondSitting" }
},
"KM007": {
name: "After Hours",
status: 0,
location: "Gym",
passage: "KenzieAfterHours",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 12, kenzie_corruption: 8, kenzie_rebellion: 5 },
requirements: { type: "mission", id: "KenzieSpotterPrivilege" }
},
"KM008": {
name: "Bailout",
status: 0,
location: "BedroomKenzie",
passage: "KenzieBailout",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 5, kenzie_corruption: 10, kenzie_rebellion: 8 },
requirements: { type: "mission", id: "KenzieFairLights" }
},
"KM009": {
name: "Fake Professional",
status: 0,
location: "LivingRoomValerie",
passage: "KenzieFakeProfessional",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 6, kenzie_corruption: 5, kenzie_rebellion: 10 },
requirements: { type: "mission", id: "KenzieBailout" }
},
"KM010": {
name: "Interest Due",
status: 0,
location: "BedroomKenzie",
passage: "KenzieInterestDue",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 10, kenzie_corruption: 12, kenzie_rebellion: 5 },
requirements: { type: "mission", id: "KenzieFakeProfessional" }
},
"KM011": {
name: "Visual Tip",
status: 0,
location: "LivingRoomValerie",
passage: "KenzieVisualTip",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 15, kenzie_corruption: 10 },
requirements: { type: "mission", id: "KenzieInterestDue" }
},
"KM012": {
name: "Fridge Raid",
status: 0,
location: "KitchenValerie",
passage: "KenzieFridgeRaid",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 10, kenzie_corruption: 8, kenzie_rebellion: 5 },
requirements: { type: "mission", id: "KenzieVisualTip" }
},
"KM013": {
name: "Leave the Door",
status: 0,
location: "BedroomKenzie",
passage: "KenzieLeaveTheDoor",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 15, kenzie_love: 8, kenzie_corruption: 10 },
requirements: { type: "scene", id: "KenzieFirstGymSex" }
},
"KM014": {
name: "Collections Call",
status: 0,
location: "BedroomKenzie",
passage: "KenzieCollectionsCall",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 12, kenzie_corruption: 15, kenzie_rebellion: 10 },
requirements: { type: "mission", id: "KenzieInterestDue" }
},
"KM015": {
name: "Pool Tab",
status: 0,
location: "PoolValerie",
passage: "KenziePoolTab",
period: ["noon", "afternoon"],
day: ["Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 12, kenzie_corruption: 12 },
requirements: { type: "scene", id: "KenzieLandlordCollect" }
},
"KM016": {
name: "Cover for Me",
status: 0,
location: "LivingRoomValerie",
passage: "KenzieCoverForMe",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_love: 10, kenzie_rebellion: 8, kenzie_corruption: 5 },
requirements: { type: "mission", id: "KenzieFridgeRaid" }
},
/* KENZIE MISSIONS END */
/* JENNA MISSIONS START */
"JM001": {
name: "Fix Jenna's Bike",
status: 0,
location: "GardenJenna",
passage: "JennaFixBike",
period: ["morning"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_love: 10, jenna_loneliness: -5, intelligence_xp: 5 },
requirements: { type: "none" }
},
"JM002": {
name: "Help Tidy Jenna's Garden",
status: 0,
location: "GardenJenna",
passage: "JennaGardenHelp",
period: ["morning", "noon"],
day: ["Sunday"],
character: "jenna",
stats: { jenna_love: 12, jenna_loneliness: -7, strength_xp: 5 },
requirements: { type: "scene", id: "JennaYogaGlimpse" }
},
"JM003": {
name: "Post-Workout Shake",
status: 0,
location: "KitchenJenna",
passage: "JennaMakeProteinShake",
period: ["noon"],
day: ["Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 15, jenna_loneliness: -10 },
requirements: { type: "scene", id: "JennaPhotoshootInsecurity" }
},
"JM004": {
name: "Fix a Stuck Window",
status: 0,
location: "BedroomJenna",
passage: "JennaFixBedroomWindow",
period: ["afternoon"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_love: 10, strength_xp: 5 },
requirements: { type: "scene", id: "JennaBathroomSpy" }
},
/* JENNA PHASE 2 MISSIONS */
/* JENNA PHASE 2 MISSIONS */
"JM005": {
name: "Form Check at the Gym",
status: 0,
location: "Gym",
passage: "JennaGymSpot",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 5, jenna_loneliness: -5 },
requirements: { type: "scene", id: "JennaGratefulHandjob" }
},
"JM006": {
name: "Depth and Focus",
status: 0,
location: "Gym",
passage: "JennaGymDepth",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "jenna",
stats: { jenna_love: 6, jenna_lust: 8, jenna_loneliness: -3 },
requirements: { type: "mission", id: "JennaGymSpot" }
},
"JM007": {
name: "Mat Partner",
status: 0,
location: "LivingRoomJenna",
passage: "JennaMatPartner",
period: ["morning"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 8, jenna_loneliness: -6 },
requirements: { type: "mission", id: "JennaGymDepth" }
},
"JM008": {
name: "One Last Pose",
status: 0,
location: "LivingRoomJenna",
passage: "JennaLastPose",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 12, jenna_corruption: 5 },
requirements: { type: "mission", id: "JennaMatPartner" }
},
"JM009": {
name: "Soft Layers",
status: 0,
location: "BedroomJenna",
passage: "JennaSoftLayers",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 10, jenna_loneliness: -5 },
requirements: { type: "scene", id: "JennaGratefulHandjob" }
},
"JM010": {
name: "After the Shower",
status: 0,
location: "BathroomJenna",
passage: "JennaAfterShower",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 6, jenna_lust: 8, jenna_loneliness: -4 },
requirements: { type: "mission", id: "JennaSoftLayers" }
},
"JM011": {
name: "Bare in the Garden",
status: 0,
location: "GardenJenna",
passage: "JennaBareGarden",
period: ["afternoon"],
day: ["Saturday", "Sunday", "Monday", "Wednesday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 15, jenna_corruption: 8, jenna_loneliness: -8 },
requirements: { type: "mission", id: "JennaAfterShower" }
},
"JM012": {
name: "Footsteps in the Hall",
status: 0,
location: "BathroomJenna",
passage: "JennaFootsteps",
/* evening only — mission→scene chains must not start late enough to wrap to midnight mid-flow */
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 10, jenna_corruption: 5, jenna_loneliness: -3 },
requirements: { type: "mission", id: "JennaSoftLayers" }
},
"JM013": {
name: "Reflection Check",
status: 0,
location: "BathroomJenna",
passage: "JennaReflection",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 5, jenna_lust: 8, jenna_corruption: 5 },
requirements: { type: "mission", id: "JennaFootsteps" }
},
"JM014": {
name: "No Pretending",
status: 0,
location: "BathroomJenna",
passage: "JennaNoPretending",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 12, jenna_corruption: 10, jenna_love: 5 },
requirements: { type: "mission", id: "JennaReflection" }
},
"JM015": {
name: "Busy and Lonely",
status: 0,
location: "LivingRoomJenna",
passage: "JennaBusyLonely",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 8, jenna_loneliness: -8 },
requirements: { type: "mission", id: "JennaGymDepth" }
},
"JM016": {
name: "Fight or Soften",
status: 0,
location: "LivingRoomJenna",
passage: "JennaFightOr",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 6, jenna_lust: 6, jenna_loneliness: -5 },
requirements: { type: "mission", id: "JennaBusyLonely" }
},
"JM017": {
name: "Don't Just Stand There",
status: 0,
location: "LivingRoomJenna",
passage: "JennaDontJustStand",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 12, jenna_love: 6, jenna_corruption: 5 },
requirements: { type: "mission", id: "JennaFightOr" }
},
"JM018": {
name: "Breakfast Look",
status: 0,
location: "KitchenJenna",
passage: "JennaBreakfastLook",
period: ["morning", "noon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 10, jenna_loneliness: -5 },
requirements: { type: "mission", id: "JennaDontJustStand" }
},
"JM019": {
name: "Dress Rehearsal",
status: 0,
location: "KitchenJenna",
passage: "JennaDressRehearsal",
period: ["evening", "afternoon"],
day: ["Friday", "Saturday", "Sunday", "Thursday"],
character: "jenna",
stats: { jenna_love: 8, jenna_lust: 10, jenna_corruption: 5 },
requirements: { type: "mission", id: "JennaBreakfastLook" }
},
"JM020": {
name: "Quiet Morning",
status: 0,
location: "BedroomJenna",
passage: "JennaQuietMorning",
period: ["morning"],
day: ["Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"],
character: "jenna",
stats: { jenna_lust: 15, jenna_love: 8, jenna_corruption: 8 },
requirements: { type: "mission", id: "JennaDressRehearsal" }
},
"JM021": {
name: "Shoot Me Properly",
status: 0,
location: "LivingRoomJenna",
passage: "JennaShootMeProperly",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 12, jenna_lust: 15, jenna_corruption: 10, jenna_loneliness: -10 },
requirements: { type: "scene", id: "JennaYogaCardio" }
},
"JM022": {
name: "Closet Confidence",
status: 0,
location: "BedroomJenna",
passage: "JennaClosetConfidence",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 10, jenna_loneliness: -6 },
requirements: { type: "mission", id: "JennaBareGarden" }
},
"JM023": {
name: "More Than Thanks",
status: 0,
location: "LivingRoomJenna",
passage: "JennaMoreThanThanks",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 12, jenna_corruption: 12, jenna_loneliness: -12 },
requirements: { type: "scene", id: "JennaYogaCardio" }
},
"JM024": {
name: "If He Calls",
status: 0,
location: "LivingRoomJenna",
passage: "JennaCallPrep",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_love: 5, jenna_loneliness: -3 },
requirements: { type: "scene", id: "JennaYogaCardio" }
},
/* JENNA PHASE 2 MISSIONS END MARK */
/* JENNA MISSIONS END */
/* RANDOM ENCOUNTERS MISSIONS START */
"TM001": {
name: "Spot Her Bench Press",
status: 0,
location: "Gym",
passage: "TiffanySpotMe",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
character: "randomEncounters.gymGirl",
stats: { strength_xp: 10, tiffany_lust: 5 },
requirements: { type: "stats", strength: 15 }
},
"PM001": {
name: "Help Her Pick an Outfit",
status: 0,
location: "MallClothing",
passage: "PaigeFittingHelp",
day: ["Monday", "Wednesday", "Friday", "Saturday"],
period: ["afternoon", "evening"],
character: "randomEncounters.fittingRoomGirl",
stats: { paige_lust: 5 },
requirements: { type: "none" }
},
"LM001": {
name: "Reach the High Shelf",
status: 0,
location: "Library",
passage: "FionaHighShelf",
day: ["Tuesday", "Thursday", "Saturday"],
period: ["afternoon"],
character: "randomEncounters.libraryGirl",
stats: { fiona_lust: 5 },
requirements: { type: "none" }
},
"CM001": {
name: "Trail Collision",
status: 0,
location: "ParkTrail",
passage: "CarmenTrailRun",
day: ["Monday", "Wednesday", "Friday", "Sunday"],
period: ["morning"],
character: "randomEncounters.parkGirl",
stats: { carmen_lust: 5 },
requirements: { type: "none" }
}
/* RANDOM ENCOUNTERS MISSIONS END */
}>>
<<set $scenes to {
"Greeting": { status: 0, location: "LivingRoom", passage: "Greeting", period: "evening", day: "Friday", character: "auntCarol", stats: { love: 5, lust: 5 }, requirements: { type: "none" } },
"KitchenPreparation": { status: 0, location: "Kitchen", passage: "KitchenPreparation", period: ["evening","night"], day: "Friday", character: "auntCarol", stats: { love: 10 }, requirements: { type: "scene", id: "Greeting" } },
"Bedtime": { status: 0, location: "BedroomCarol", passage: "Bedtime", period: ["evening","night"], day: ["Friday"], character: "auntCarol", stats: { lust: 15, corruption: 5 }, requirements: { type: "scene", id: "KitchenPreparation" } },
"KitchenFlirt": { status: 0, location: "Kitchen", passage: "KitchenFlirt", period: ["morning", "noon"], day: "Saturday", character: "auntCarol", stats: { love: 10, lust: 10 }, requirements: { type: "mission", id: "KitchenChores" },
replay: {
label: "Linger and watch her move",
actType: "tease",
character: "auntCarol",
locations: ["Kitchen"],
periods: ["morning", "noon"],
requirements: { lust: 10, love: 5 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 4, corruption: 1 }, player: { lust: 6 } },
cooldownHours: 8,
videos: ["img/chars/carol/flirt/alexapearl_flirt_bouncing.webm"],
passage: "ReplayCarolKitchenTease",
cooldownLine: "She catches your look and shakes her head, smiling. \"Twice in one morning, sweetie? Save some for later.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"LivingRoomInteraction": { status: 0, location: "LivingRoom", passage: "LivingRoomInteraction", period: ["morning", "noon"], day: "Saturday", character: "auntCarol", stats: { love: 10, lust: 10 }, requirements: { type: "mission", id: "LivingRoomChores" },
replay: {
label: "Lean back and watch her move",
actType: "tease",
character: "auntCarol",
locations: ["LivingRoom"],
periods: ["morning", "noon", "afternoon"],
requirements: { lust: 12, love: 5 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 4, corruption: 2 }, player: { lust: 6 } },
cooldownHours: 8,
videos: ["img/chars/carol/tease/alexapearl_twerk_2.webm"],
passage: "ReplayCarolLivingRoomDance",
cooldownLine: "She catches you looking and smirks. \"You're going to wear out the carpet, sweetie. And me. Later.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"WardrobeHelp": { status: 0, location: "BedroomCarol", passage: "WardrobeHelpScene", period: ["noon", "afternoon"], day: ["Saturday", "Sunday"], character: "auntCarol", stats: { lust: 20, corruption: 10 }, requirements: { type: "mission", id: "WardrobeHelp" },
replay: {
label: "Catch her trying outfits on",
actType: "tease",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["noon", "afternoon"],
requirements: { lust: 18, love: 8 },
cost: { energy: 7, time: 1 },
statsApplied: { auntCarol: { lust: 6, corruption: 3 }, player: { lust: 8 } },
cooldownHours: 10,
videos: [
"img/chars/carol/change_clothes/alexapearl_changing_bikini_black.webm",
"img/chars/carol/change_clothes/alexapearl_changing_bikini_red.webm",
"img/chars/carol/change_clothes/alexapearl_changing_bikini_blue.webm",
"img/chars/carol/change_clothes/alexapearl_changing_jeans.webm"
],
passage: "ReplayCarolWardrobe",
cooldownLine: "She closes the wardrobe with a wink. \"My closet has limits, sweetie. Come back later.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"PoolsideRelaxation": { status: 0, location: "Pool", passage: "PoolsideRelaxation", period: ["noon"], day: "Saturday", character: "auntCarol", stats: { lust: 20, corruption: 10 }, requirements: { type: "mission", id: "PoolChores" },
replay: {
label: "Stretch out on the lounger beside her",
actType: "tease",
character: "auntCarol",
locations: ["Pool"],
periods: ["noon", "afternoon"],
requirements: { lust: 15, love: 8 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 5, corruption: 2 }, player: { lust: 7 } },
cooldownHours: 10,
videos: ["img/chars/carol/sunbathing/alexapearl_sunbathing.webm"],
passage: "ReplayCarolPoolside",
cooldownLine: "\"My poor skin's had enough sun for one day, sweetie. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BathroomEspionage": {
status: 0,
location: "Bathroom",
passage: "BathroomSpyScene",
period: "afternoon",
day: ["Saturday"],
character: "auntCarol",
stats: { lust: 25, corruption: 10 },
requirements: { type: "mission", id: "BathroomCleaning" },
replay: {
label: "Pause at the shower door",
actType: "shower",
character: "auntCarol",
locations: ["Bathroom"],
periods: ["morning", "noon", "afternoon", "evening"],
requirements: { lust: 25, love: 10 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 8, corruption: 4 }, player: { lust: 10 } },
cooldownHours: 12,
videos: [
"img/chars/carol/bath/alexapearl_bath_spying.webm",
"img/chars/carol/bath/alexapearl_bath_catch_spying.webm"
],
passage: "ReplayCarolBathroomSpy",
cooldownLine: "She wraps the towel tighter. \"Get out — I just got in. Try later, sneaky.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"EveningWine": {
status: 0,
location: "LivingRoom",
passage: "EveningWineProvocation",
period: "evening",
day: ["Saturday"],
character: "auntCarol",
stats: { lust: 20, corruption: 15, love: 10 },
requirements: { type: "mission", id: "ConfirmAngelaDelivery" },
replay: {
label: "Pour her another glass of wine",
actType: "tease",
character: "auntCarol",
locations: ["LivingRoom"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 12 },
cost: { energy: 5, time: 1 },
statsApplied: { auntCarol: { lust: 8, corruption: 5 }, player: { lust: 10 } },
cooldownHours: 10,
videos: [
"img/chars/carol/tease/alexapearl_boucing_tits_w_tshirt.webm",
"img/chars/carol/tease/alexapearl_boucing_tits_w_no_tshirt.webm"
],
passage: "ReplayCarolWine",
cooldownLine: "She covers her glass with a hand. \"Mm — not tonight, sweetie. I'm tipsy enough.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BedroomHandjob": {
status: 0,
location: "BedroomCarol",
passage: "NighttimeHandjob",
period: "night",
day: ["Saturday"],
character: "auntCarol",
stats: { lust: 30, love: 15, corruption: 10 },
requirements: { type: "mission", id: "EveningDishes" },
replay: {
label: "Slip into her room",
actType: "handjob",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 30, love: 20 },
cost: { energy: 10, time: 1 },
statsApplied: { auntCarol: { lust: 8, corruption: 3 }, player: { lust: 15 } },
cooldownHours: 12,
videos: ["img/chars/carol/handjob/alexapearl_handjob_no_cum.webm"],
passage: "ReplayCarolHandjob",
cooldownLine: "\"My hand isn't a vending machine, sweetie. Give your auntie a minute.\" She kisses your cheek but the door's already closing.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"MorningTitsjob": {
status: 0,
location: "Bedroom",
passage: "MorningSurpriseTitsjob",
period: "morning",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 35, love: 20, corruption: 15 },
requirements: { type: "scene", id: "NighttimeHandjob" },
replay: {
label: "Stay in bed when she comes in",
actType: "titsjob",
character: "auntCarol",
locations: ["Bedroom"],
periods: ["morning"],
requirements: { lust: 30, love: 18 },
cost: { energy: 12, time: 1 },
statsApplied: { auntCarol: { lust: 10, corruption: 5 }, player: { lust: 18 } },
cooldownHours: 14,
videos: ["img/chars/carol/titjob/alexapearl_titjob_w_clothes.webm"],
passage: "ReplayCarolTitsjob",
cooldownLine: "\"Twice in one morning is asking a lot, sweetie. Give your aunt a chance to recover.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SharedBathProvocation": {
status: 0,
location: "Bathroom",
passage: "AfternoonSharedBath",
period: "afternoon",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 25, corruption: 10 },
requirements: { type: "mission", id: "ChangeLightbulb" },
replay: {
label: "Suggest sharing the bath again",
actType: "shower",
character: "auntCarol",
locations: ["Bathroom"],
periods: ["afternoon", "evening"],
requirements: { lust: 28, love: 15 },
cost: { energy: 8, time: 2 },
statsApplied: { auntCarol: { lust: 10, corruption: 5 }, player: { lust: 14 } },
cooldownHours: 12,
videos: [
"img/chars/carol/bath/alexapearl_bath_1.webm",
"img/chars/carol/bath/alexapearl_bath_2.webm",
"img/chars/carol/bath/alexapearl_bath_3.webm"
],
passage: "ReplayCarolSharedBath",
cooldownLine: "She holds up her hand, dripping. \"My skin's pruning. We need a break before we look like raisins.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"FarewellBlowjob": {
status: 0,
location: "Bedroom",
passage: "EveningFarewellBJ",
period: "evening",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 40, love: 25, corruption: 20 },
requirements: { type: "mission", id: "PackBagsToGo" },
replay: {
label: "Catch her between rooms",
actType: "blowjob",
character: "auntCarol",
locations: ["Bedroom"],
periods: ["evening", "night"],
requirements: { lust: 40, love: 25 },
cost: { energy: 15, time: 1 },
statsApplied: { auntCarol: { lust: 12, corruption: 6 }, player: { lust: 22 } },
cooldownHours: 18,
videos: [
"img/chars/carol/blowjob/alexapearl_blowjob_end_scene_1.webm",
"img/chars/carol/blowjob/alexapearl_blowjob_end_scene_2.webm",
"img/chars/carol/blowjob/alexapearl_blowjob_end_scene_3.webm"
],
passage: "ReplayCarolFarewellBJ",
cooldownLine: "She wipes her lips. \"Mm. My jaw's done for tonight. Tomorrow's another day.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AngelaWalkingSpy": {
status: 0,
location: "AngelaHouse",
passage: "AngelaAfternoonWalkSpy",
period: "afternoon",
day: ["Saturday"],
character: "neighborAngela",
stats: { angela_lust: 10, player_corruption: 5 },
requirements: { type: "mission", id: "DeliverPackageToAngela" },
replay: {
label: "Catch her finishing her run",
actType: "tease",
character: "neighborAngela",
locations: ["AngelaHouse", "AngelaHouseGarden"],
periods: ["morning", "afternoon"],
requirements: { lust: 8, love: 5 },
cost: { energy: 4, time: 1 },
statsApplied: { neighborAngela: { lust: 5, corruption: 2 }, player: { lust: 6 } },
cooldownHours: 12,
videos: [
"img/chars/neighbor/etc/angela_walking.webm",
"img/chars/neighbor/etc/angela_walking_long.webm"
],
passage: "ReplayAngelaWalking",
cooldownLine: "She wipes her brow. \"I'm exhausted, sweetie. Already ran twice today. Some other time?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AngelaThanksHandjob": {
status: 0,
location: "AngelaHouseGarden",
passage: "AngelaGardenThanksHJ",
period: "noon",
day: ["Sunday"],
character: "neighborAngela",
stats: { angela_lust: 25, angela_love: 15, angela_corruption: 10 },
requirements: { type: "mission", id: "WaterAngelaPlants" },
replay: {
label: "Ask if the garden rules still apply",
actType: "handjob",
character: "neighborAngela",
locations: ["AngelaHouseGarden"],
periods: ["noon", "afternoon", "evening"],
requirements: { lust: 25, love: 15 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 8, corruption: 4, domination: 2 }, player: { lust: 16 } },
cooldownHours: 14,
videos: [
"img/chars/neighbor/tease/angela_show_tits.webm",
"img/chars/neighbor/handjob/angela_handjob_cum.webm"
],
passage: "ReplayAngelaHandjob",
cooldownLine: "She holds up the garden gloves, smiling. \"Auntie Angela needs a break, darling. Fence is closed for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* ANGELA PHASE 2 SCENES DEFS */
"AS003": {
name: "Living Room Tease",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaLivingTease",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 18, angela_love: 6, angela_corruption: 6 },
requirements: { type: "mission", id: "AngelaSettlingIn" },
replay: {
label: "Ask if she still has those tops",
actType: "tease",
character: "neighborAngela",
locations: ["LivingRoomAngela"],
periods: ["evening"],
requirements: { lust: 15, love: 20 },
cost: { energy: 8, time: 1 },
statsApplied: { neighborAngela: { lust: 6 }, player: { lust: 10 } },
cooldownHours: 14,
videos: [
"img/chars/neighbor/tease_shorts/angela_blue_top_tits_out.mp4",
"img/chars/neighbor/tease_shorts/angela_white_top_talking.mp4"
],
passage: "ReplayAngelaLivingTease",
cooldownLine: "She pulls her top up. \"Not twice in one night, sweetie.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS004": {
name: "Bedroom Oil Tease",
status: 0,
location: "BedroomAngela",
passage: "AngelaBedroomOil",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 22, angela_love: 6, angela_corruption: 8 },
requirements: { type: "mission", id: "AngelaSpareKey" },
replay: {
label: "Ask for the oil again",
actType: "tease",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 20, love: 30 },
cost: { energy: 10, time: 1 },
statsApplied: { neighborAngela: { lust: 7 }, player: { lust: 12 } },
cooldownHours: 16,
videos: [
"img/chars/neighbor/tease_shorts/angela_denim_shorts_allfours.mp4",
"img/chars/neighbor/tease_shorts/angela_oiled_ass_closeup.mp4"
],
passage: "ReplayAngelaBedroomOil",
cooldownLine: "She wipes her palm. \"I'm shiny enough for one night.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS005": {
name: "Fishnet Toy",
status: 0,
location: "BedroomAngela",
passage: "AngelaFishnetToy",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 24, angela_love: 6, angela_corruption: 12 },
requirements: { type: "scene", id: "AngelaBedroomOil" },
replay: {
label: "Ask about the fishnets",
actType: "tease",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 22, corruption: 10 },
cost: { energy: 10, time: 1 },
statsApplied: { neighborAngela: { lust: 8, corruption: 2 }, player: { lust: 14 } },
cooldownHours: 16,
videos: ["img/chars/neighbor/tease_shorts/angela_fishnet_cum_tits.mp4"],
passage: "ReplayAngelaFishnetToy",
cooldownLine: "She peels a mesh strap. \"That set needs laundry. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS006": {
name: "Hike Heat",
status: 0,
location: "Park",
passage: "AngelaHikeHeat",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 28, angela_love: 10, angela_corruption: 10 },
requirements: { type: "mission", id: "AngelaSummitDare" },
replay: {
label: "Suggest another trail",
actType: "oral",
character: "neighborAngela",
locations: ["Park"],
periods: ["afternoon"],
requirements: { lust: 25, love: 30 },
cost: { energy: 14, time: 1 },
statsApplied: { neighborAngela: { lust: 9 }, player: { lust: 16 } },
cooldownHours: 18,
videos: [
"img/chars/neighbor/hike/angela_first_hike_1.mp4",
"img/chars/neighbor/hike/angela_first_hike_2.mp4",
"img/chars/neighbor/hike/angela_first_hike_3.mp4"
],
passage: "ReplayAngelaHikeHeat",
cooldownLine: "She ties her jacket. \"My legs are jelly. Trail's closed for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS007": {
name: "Shower Grab",
status: 0,
location: "BathroomAngela",
passage: "AngelaShowerGrab",
period: ["morning", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 22, angela_love: 8, angela_corruption: 8 },
requirements: { type: "mission", id: "AngelaGuestTowels" },
replay: {
label: "Join her steam",
actType: "tease",
character: "neighborAngela",
locations: ["BathroomAngela"],
periods: ["morning", "evening"],
requirements: { lust: 18, love: 25 },
cost: { energy: 10, time: 1 },
statsApplied: { neighborAngela: { lust: 7 }, player: { lust: 12 } },
cooldownHours: 14,
videos: ["img/chars/neighbor/shower/angela_shower_titty_grab.mp4"],
passage: "ReplayAngelaShowerGrab",
cooldownLine: "She tosses you a towel. \"Water bill. One soak per visit.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS008": {
name: "Office Sloppy",
status: 0,
location: "OfficeAngela",
passage: "AngelaOfficeSloppy",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
character: "neighborAngela",
stats: { angela_lust: 30, angela_love: 8, angela_corruption: 12 },
requirements: { type: "mission", id: "AngelaQuietHours" },
replay: {
label: "Knock on the office door",
actType: "oral",
character: "neighborAngela",
locations: ["OfficeAngela"],
periods: ["afternoon"],
requirements: { lust: 25, love: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 9, corruption: 2 }, player: { lust: 16 } },
cooldownHours: 16,
videos: [
"img/chars/neighbor/office/angela_first_office_sloppy_1.mp4",
"img/chars/neighbor/office/angela_first_office_sloppy_3.mp4",
"img/chars/neighbor/office/angela_first_office_sloppy_5.mp4"
],
passage: "ReplayAngelaOfficeSloppy",
cooldownLine: "She wipes her desk calendar. \"Meetings only. No more 'breaks' today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS009": {
name: "POV Blowjob",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaPOVBlowjob",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 32, angela_love: 12, angela_corruption: 10 },
requirements: { type: "scene", id: "AngelaOfficeSloppy" },
replay: {
label: "Ask if she wants to kneel again",
actType: "oral",
character: "neighborAngela",
locations: ["LivingRoomAngela", "BedroomAngela"],
periods: ["evening"],
requirements: { lust: 28, love: 30 },
cost: { energy: 14, time: 1 },
statsApplied: { neighborAngela: { lust: 10 }, player: { lust: 18 } },
cooldownHours: 16,
videos: [
"img/chars/neighbor/pov_blowjob/angela_first_pov_blowjob_1.mp4",
"img/chars/neighbor/pov_blowjob/angela_first_pov_blowjob_5.mp4",
"img/chars/neighbor/pov_blowjob/angela_first_pov_blowjob_10.mp4"
],
passage: "ReplayAngelaPOVBlowjob",
cooldownLine: "She touches her jaw. \"Auntie Angela's mouth is off the clock.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS010": {
name: "Tittyfuck Finish",
status: 0,
location: "LivingRoomAngela",
passage: "AngelaTittyfuck",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 30, angela_love: 10, angela_corruption: 10 },
requirements: { type: "mission", id: "AngelaSoftLanding" },
replay: {
label: "Ask for the soft landing",
actType: "titjob",
character: "neighborAngela",
locations: ["LivingRoomAngela", "BedroomAngela"],
periods: ["evening"],
requirements: { lust: 26, love: 28 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 9 }, player: { lust: 16 } },
cooldownHours: 16,
videos: ["img/chars/neighbor/tittyfuck/angela_tittyfuck_cum.mp4"],
passage: "ReplayAngelaTittyfuck",
cooldownLine: "She cups herself carefully. \"They're sensitive. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS011": {
name: "Pool Eat",
status: 0,
location: "PoolAngela",
passage: "AngelaPoolEat",
period: ["afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 28, angela_love: 10, angela_corruption: 12 },
requirements: { type: "mission", id: "AngelaSunscreen" },
replay: {
label: "Dive under again",
actType: "oral",
character: "neighborAngela",
locations: ["PoolAngela"],
periods: ["afternoon"],
requirements: { lust: 24, love: 28 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 8, corruption: 2 }, player: { lust: 15 } },
cooldownHours: 16,
videos: [
"img/chars/neighbor/pool_eat/angela_first_pool_eat_1.mp4",
"img/chars/neighbor/pool_eat/angela_first_pool_eat_2.mp4",
"img/chars/neighbor/pool_eat/angela_first_pool_eat_3.mp4"
],
passage: "ReplayAngelaPoolEat",
cooldownLine: "She floats on her back. \"Chlorine and... that. Enough for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS012": {
name: "Kitchen Curves",
status: 0,
location: "KitchenAngela",
passage: "AngelaCurves",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 36, angela_love: 16, angela_corruption: 14 },
requirements: { type: "scene", id: "AngelaTittyfuck" },
replay: {
label: "Clear the kitchen table",
actType: "sex",
character: "neighborAngela",
locations: ["KitchenAngela"],
periods: ["evening"],
requirements: { lust: 30, love: 40 },
cost: { energy: 16, time: 1 },
statsApplied: { neighborAngela: { lust: 12, love: 3 }, player: { lust: 20 } },
cooldownHours: 20,
videos: [
"img/chars/neighbor/curves/angela_curves_1.mp4",
"img/chars/neighbor/curves/angela_curves_6.mp4",
"img/chars/neighbor/curves/angela_curves_12.mp4"
],
passage: "ReplayAngelaCurves",
cooldownLine: "She laughs, breathless. \"Table's sticky. We're done cooking for tonight.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS013": {
name: "Overnight",
status: 0,
location: "BedroomAngela",
passage: "AngelaOvernight",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 34, angela_love: 14, angela_corruption: 12 },
requirements: { type: "mission", id: "AngelaSpareKey" },
replay: {
label: "Stay the night again",
actType: "sex",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening", "night"],
requirements: { lust: 28, love: 45 },
cost: { energy: 16, time: 1 },
statsApplied: { neighborAngela: { lust: 11, love: 2 }, player: { lust: 18 } },
cooldownHours: 20,
videos: [
"img/chars/neighbor/overnight/angela_step_sister_1.mp4",
"img/chars/neighbor/overnight/angela_step_sister_7.mp4",
"img/chars/neighbor/overnight/angela_step_sister_14.mp4"
],
passage: "ReplayAngelaOvernight",
cooldownLine: "She pulls the sheet up. \"Sleep. Real sleep. We both work tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS014": {
name: "Morning After",
status: 0,
location: "BedroomAngela",
passage: "AngelaMorningAfter",
period: ["morning"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 30, angela_love: 14, angela_corruption: 10 },
requirements: { type: "mission", id: "AngelaSunriseCup" },
replay: {
label: "Wake her soft",
actType: "sex",
character: "neighborAngela",
locations: ["BedroomAngela", "KitchenAngela"],
periods: ["morning"],
requirements: { lust: 26, love: 45 },
cost: { energy: 14, time: 1 },
statsApplied: { neighborAngela: { lust: 10, love: 2 }, player: { lust: 16 } },
cooldownHours: 18,
videos: [
"img/chars/neighbor/morning/angela_morning_1.mp4",
"img/chars/neighbor/morning/angela_morning_5.mp4",
"img/chars/neighbor/morning/angela_morning_10.mp4"
],
passage: "ReplayAngelaMorningAfter",
cooldownLine: "She sips coffee naked. \"One morning miracle. Then clothes.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS015": {
name: "Femdom Awakening",
status: 0,
location: "BedroomAngela",
passage: "AngelaFemdom",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 32, angela_love: 8, angela_corruption: 16 },
requirements: { type: "mission", id: "AngelaHouseRules" },
replay: {
label: "Ask who holds the gloves tonight",
actType: "handjob",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 28, corruption: 20 },
cost: { energy: 14, time: 1 },
statsApplied: { neighborAngela: { lust: 10, corruption: 3 }, player: { lust: 18 } },
cooldownHours: 20,
videos: [
"img/chars/neighbor/femdom/angela_first_femdom_tease_1.mp4",
"img/chars/neighbor/femdom/angela_first_femdom_tease_2.mp4",
"img/chars/neighbor/femdom/angela_first_femdom_tease_3.mp4"
],
passage: "ReplayAngelaFemdom",
cooldownLine: "She peels a glove off with her teeth. \"Mistress clocked out. Soft Angela needs sleep.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS016": {
name: "Eating Cum",
status: 0,
location: "BedroomAngela",
passage: "AngelaEatingCum",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 28, angela_love: 6, angela_corruption: 20 },
requirements: { type: "scene", id: "AngelaFemdom" },
replay: {
label: "Ask her to finish the order",
actType: "oral",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 30, corruption: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { neighborAngela: { lust: 8, corruption: 4 }, player: { lust: 14 } },
cooldownHours: 18,
videos: [
"img/chars/neighbor/eating_cum/angela_first_eating_cum_1.mp4",
"img/chars/neighbor/eating_cum/angela_first_eating_cum_3.mp4",
"img/chars/neighbor/eating_cum/angela_first_eating_cum_4.mp4"
],
passage: "ReplayAngelaEatingCum",
cooldownLine: "She wipes her lip, shy again. \"That was... a lot. Not again tonight.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"AS017": {
name: "True Anal",
status: 0,
location: "BedroomAngela",
passage: "AngelaTrueAnal",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "neighborAngela",
stats: { angela_lust: 36, angela_love: 12, angela_corruption: 18 },
requirements: { type: "scene", id: "AngelaMorningAfter" },
replay: {
label: "Ask if she trusts you that deep",
actType: "anal",
character: "neighborAngela",
locations: ["BedroomAngela"],
periods: ["evening"],
requirements: { lust: 32, love: 50, corruption: 20 },
cost: { energy: 16, time: 1 },
statsApplied: { neighborAngela: { lust: 12, corruption: 3 }, player: { lust: 20 } },
cooldownHours: 22,
videos: [
"img/chars/neighbor/true_anal/angela_true_anal_1.mp4",
"img/chars/neighbor/true_anal/angela_true_anal_4.mp4",
"img/chars/neighbor/true_anal/angela_true_anal_7.mp4"
],
passage: "ReplayAngelaTrueAnal",
cooldownLine: "She breathes carefully. \"Not twice. My body needs a day.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SkylarChangingRoomSpy": {
status: 0,
location: "LocalStore",
passage: "SkylarChangingSpyScene",
period: "afternoon",
day: ["Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 15, player_corruption: 7 },
requirements: { type: "mission", id: "SkylarFixRegister" },
replay: {
label: "Drift toward the back of the store",
actType: "tease",
character: "storeSkylar",
locations: ["LocalStore", "LocalStoreStock"],
periods: ["afternoon", "evening"],
requirements: { lust: 12 },
cost: { energy: 3, time: 0 },
statsApplied: { storeSkylar: { lust: 4 }, player: { lust: 5, corruption: 2 } },
cooldownHours: 8,
videos: ["img/chars/skylar/spy/sweetie_remove_clothe.webm"],
passage: "ReplaySkylarChangingSpy",
cooldownLine: "The door is shut tight today. \"You again? Take a hint.\" she calls without looking up.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SkylarForcedBlowjob": {
status: 0,
location: "LocalStore",
passage: "SkylarStressForcedBJ",
period: "afternoon",
day: ["Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 30, skylar_love: -10, skylar_corruption: 25, player_domination: 10 },
requirements: { type: "mission", id: "SkylarLastDeliveryRefusal" },
replay: {
label: "Pin her against the counter",
actType: "blowjob",
character: "storeSkylar",
locations: ["LocalStore"],
periods: ["afternoon", "evening"],
requirements: { lust: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { storeSkylar: { lust: 10, corruption: 5 }, player: { lust: 18, domination: 3 } },
cooldownHours: 18,
videos: [
"img/chars/skylar/blowjob/sweetie_forced_bj_1.webm",
"img/chars/skylar/blowjob/sweetie_forced_bj_2.webm",
"img/chars/skylar/blowjob/sweetie_forced_bj_3.webm"
],
passage: "ReplaySkylarBlowjob",
cooldownLine: "She glares. \"Once a day. That was the deal in my head. Get out.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* SKYLAR PHASE 2 SCENES DEFS */
"SS005": {
name: "Shower Solo Show",
status: 0,
location: "BathroomSkylar",
passage: "SkylarShowerDildo",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 28, skylar_love: 6, skylar_corruption: 12 },
requirements: { type: "mission", id: "SkylarSteam" },
replay: {
label: "Watch her steam up the glass again",
actType: "tease",
character: "storeSkylar",
locations: ["BathroomSkylar"],
periods: ["evening"],
requirements: { lust: 22 },
cost: { energy: 10, time: 1 },
statsApplied: { storeSkylar: { lust: 8 }, player: { lust: 14 } },
cooldownHours: 16,
videos: [
"img/chars/skylar/showerdildo/skylar_first_showerdildo_3.mp4",
"img/chars/skylar/showerdildo/skylar_first_showerdildo_5.mp4"
],
passage: "ReplaySkylarShowerDildo",
cooldownLine: "She fogs the mirror with a palm. \"Once a night. I still work mornings.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS006": {
name: "Sofa Fingertease",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarSofaFinger",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 26, skylar_love: 8, skylar_corruption: 10 },
requirements: { type: "mission", id: "SkylarCouchRules" },
replay: {
label: "Claim the couch again",
actType: "tease",
character: "storeSkylar",
locations: ["LivingRoomSkylar"],
periods: ["evening"],
requirements: { lust: 20, love: 20 },
cost: { energy: 8, time: 1 },
statsApplied: { storeSkylar: { lust: 7 }, player: { lust: 12 } },
cooldownHours: 14,
videos: ["img/chars/skylar/tease/skylar_first_fingertease.mp4"],
passage: "ReplaySkylarSofaFinger",
cooldownLine: "She tugs a throw over her thighs. \"Couch is closed for tonight.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS007": {
name: "Spank Night",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarSpankNight",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 30, skylar_love: 6, skylar_corruption: 16 },
requirements: { type: "scene", id: "SkylarSofaFinger" },
replay: {
label: "Ask for another count",
actType: "rough",
character: "storeSkylar",
locations: ["LivingRoomSkylar", "BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 28, corruption: 15 },
cost: { energy: 12, time: 1 },
statsApplied: { storeSkylar: { lust: 10, corruption: 3 }, player: { lust: 16, domination: 2 } },
cooldownHours: 18,
videos: [
"img/chars/skylar/spank/skylar_first_spank_2.mp4",
"img/chars/skylar/spank/skylar_first_spank_4.mp4",
"img/chars/skylar/tease/skylar_first_assgrip.mp4"
],
passage: "ReplaySkylarSpankNight",
cooldownLine: "She rubs a palm over her hip. \"My ass has a shift limit.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS009": {
name: "Instruction Blowjob",
status: 0,
location: "LivingRoomSkylar",
passage: "SkylarInstructionBJ",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 32, skylar_love: 10, skylar_corruption: 12 },
requirements: { type: "mission", id: "SkylarStayLate" },
replay: {
label: "Ask her to coach you again",
actType: "blowjob",
character: "storeSkylar",
locations: ["LivingRoomSkylar"],
periods: ["evening"],
requirements: { lust: 24, love: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { storeSkylar: { lust: 9 }, player: { lust: 18 } },
cooldownHours: 16,
videos: [
"img/chars/skylar/joibj/skylar_first_joibj_2.mp4",
"img/chars/skylar/joibj/skylar_first_joibj_4.mp4"
],
passage: "ReplaySkylarInstructionBJ",
cooldownLine: "She wipes her mouth with the back of her hand. \"Lesson closed. Study later.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS010": {
name: "Car Lot Blowjob",
status: 0,
location: "LocalStore",
passage: "SkylarCarBJ",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 34, skylar_love: 5, skylar_corruption: 14 },
requirements: { type: "mission", id: "SkylarAfterTill" },
replay: {
label: "Offer her a ride after close",
actType: "blowjob",
character: "storeSkylar",
locations: ["LocalStore"],
periods: ["evening"],
requirements: { lust: 26 },
cost: { energy: 12, time: 1 },
statsApplied: { storeSkylar: { lust: 10, corruption: 2 }, player: { lust: 18 } },
cooldownHours: 18,
videos: [
"img/chars/skylar/carbj/skylar_first_carbj_2.mp4",
"img/chars/skylar/carbj/skylar_first_carbj_5.mp4"
],
passage: "ReplaySkylarCarBJ",
cooldownLine: "She locks the till drawer hard. \"Parking lot is done for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS011": {
name: "Passionate First Night",
status: 0,
location: "BedroomSkylar",
passage: "SkylarPassionate",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 40, skylar_love: 18, skylar_corruption: 18 },
requirements: { type: "scene", id: "SkylarInstructionBJ" },
replay: {
label: "Stay the night again",
actType: "sex",
character: "storeSkylar",
locations: ["BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 30, love: 35 },
cost: { energy: 16, time: 1 },
statsApplied: { storeSkylar: { lust: 12, love: 3 }, player: { lust: 22 } },
cooldownHours: 20,
videos: [
"img/chars/skylar/passionate/skylar_first_passionate_3.mp4",
"img/chars/skylar/passionate/skylar_first_passionate_6.mp4",
"img/chars/skylar/tease/skylar_first_assride.mp4"
],
passage: "ReplaySkylarPassionate",
cooldownLine: "She kisses your jaw and points at the door. \"I open at nine. Sleep.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS012": {
name: "Pantyhose Pool Night",
status: 0,
location: "PoolComplexSkylar",
passage: "SkylarPantyhosePool",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 38, skylar_love: 10, skylar_corruption: 18 },
requirements: { type: "mission", id: "SkylarPoolEvening" },
replay: {
label: "Meet her at the pool fence",
actType: "sex",
character: "storeSkylar",
locations: ["PoolComplexSkylar"],
periods: ["evening"],
requirements: { lust: 32, corruption: 18 },
cost: { energy: 14, time: 1 },
statsApplied: { storeSkylar: { lust: 11, corruption: 3 }, player: { lust: 20 } },
cooldownHours: 20,
videos: [
"img/chars/skylar/pantyhose/skylar_first_pantyhose_3.mp4",
"img/chars/skylar/pantyhose/skylar_first_pantyhose_7.mp4"
],
passage: "ReplaySkylarPantyhosePool",
cooldownLine: "She wraps a towel tight. \"Pool hours are over. For us.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS013": {
name: "Homemade Anal",
status: 0,
location: "BedroomSkylar",
passage: "SkylarHomemadeAnal",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 42, skylar_love: 8, skylar_corruption: 28 },
requirements: { type: "mission", id: "SkylarSpotMeOnce" },
replay: {
label: "Ask if she still wants it rough",
actType: "anal",
character: "storeSkylar",
locations: ["BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 35, corruption: 25 },
cost: { energy: 18, time: 1 },
statsApplied: { storeSkylar: { lust: 14, corruption: 4 }, player: { lust: 24, domination: 3 } },
cooldownHours: 24,
videos: [
"img/chars/skylar/homemadeanal/skylar_first_homemadeanal_8.mp4",
"img/chars/skylar/homemadeanal/skylar_first_homemadeanal_14.mp4"
],
passage: "ReplaySkylarHomemadeAnal",
cooldownLine: "She winces and laughs softly. \"Not twice in one day. I'm not made of rubber.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS014": {
name: "Jacuzzi Trip",
status: 0,
location: "ApartmentSkylar",
passage: "SkylarJacuzziTrip",
period: ["evening"],
day: ["Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 36, skylar_love: 14, skylar_corruption: 14 },
requirements: { type: "mission", id: "SkylarOutOfTown" },
replay: {
label: "Book another spa night",
actType: "sex",
character: "storeSkylar",
locations: ["ApartmentSkylar", "BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 28, love: 30 },
cost: { energy: 14, time: 1 },
statsApplied: { storeSkylar: { lust: 10, love: 2 }, player: { lust: 18 } },
cooldownHours: 20,
videos: [
"img/chars/skylar/jacuzzi/skylar_first_jacuzzi_3.mp4",
"img/chars/skylar/jacuzzi/skylar_first_jacuzzi_6.mp4"
],
passage: "ReplaySkylarJacuzziTrip",
cooldownLine: "She scrolls hotel rates and sighs. \"My wallet needs a cooldown too.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"SS017": {
name: "Busty Brunette Peak",
status: 0,
location: "BedroomSkylar",
passage: "SkylarBustyBrunette",
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "storeSkylar",
stats: { skylar_lust: 44, skylar_love: 10, skylar_corruption: 30 },
requirements: { type: "scene", id: "SkylarHomemadeAnal" },
replay: {
label: "Ask for the lingerie set again",
actType: "anal",
character: "storeSkylar",
locations: ["BedroomSkylar"],
periods: ["evening"],
requirements: { lust: 38, corruption: 30 },
cost: { energy: 18, time: 1 },
statsApplied: { storeSkylar: { lust: 14, corruption: 4 }, player: { lust: 24 } },
cooldownHours: 24,
videos: [
"img/chars/skylar/bustybrunette/skylar_first_bustybrunette_3.mp4",
"img/chars/skylar/bustybrunette/skylar_first_bustybrunette_7.mp4"
],
passage: "ReplaySkylarBustyBrunette",
cooldownLine: "She hangs the lace carefully. \"That set is retired for the night.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* SKYLAR PHASE 2 SCENES DEFS END */
/* BRANDI SCENES START */
"BS001": {
name: "Brandi's Financial Trouble",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiOverheardCall",
period: ["afternoon"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 5 },
requirements: { type: "mission", id: "BrandiDustingDuty" },
replay: {
label: "Catch her on the phone again",
actType: "tease",
character: "openWorldGirls.brandi",
locations: ["LivingRoomBrandi"],
periods: ["afternoon", "evening"],
requirements: { lust: 8, love: 0 },
cost: { energy: 5, time: 1 },
statsApplied: { player: { lust: 6 } },
cooldownHours: 8,
videos: ["img/chars/brandi/etc/brandi_at_phone.jpg", "img/chars/brandi/etc/brandi_at_phone_2.png"],
passage: "ReplayBrandiOverheardCall",
cooldownLine: "She glances up from the call long enough to glare at you. \"You again? *Move along.*\" Her hand covers the receiver.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS002": {
name: "A New Power Dynamic",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiPowerShift",
period: ["afternoon", "evening"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 10, brandi_lust: 5 },
requirements: { type: "mission", id: "BrandiLeverageConfrontation" },
replay: {
label: "Remind her of the new arrangement",
actType: "tease",
character: "openWorldGirls.brandi",
locations: ["LivingRoomBrandi"],
periods: ["afternoon", "evening"],
requirements: { lust: 12, love: 0 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 10, domination: 1 } },
cooldownHours: 10,
videos: [
"img/chars/brandi/brandi_confrotation_scene/brandi_1_serving_coffee.png",
"img/chars/brandi/brandi_confrotation_scene/brandi_2_knees.png",
"img/chars/brandi/brandi_confrotation_scene/brandi_3_remove_player_feet.jpg"
],
passage: "ReplayBrandiPowerShift",
cooldownLine: "\"I served you my dignity *once* today already. Don't push your luck, peasant.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS003": {
name: "Fear and Gratitude",
status: 0,
location: "GardenBrandi",
passage: "BrandiLetterDisposed",
period: ["evening"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_corruption: 8, brandi_lust: 7, brandi_love: 2 },
requirements: { type: "mission", id: "BrandiDisposeOfLetter" },
replay: {
label: "Find her in the garden again",
actType: "tease",
character: "openWorldGirls.brandi",
locations: ["GardenBrandi"],
periods: ["evening"],
requirements: { lust: 15, love: 5 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 12,
videos: ["img/chars/brandi/dressed/brandi_dresses_living_room.jpg"],
passage: "ReplayBrandiGardenGratitude",
cooldownLine: "She tightens her shawl. \"You can't keep cashing in on that night forever. Once a day, no more.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS004": {
name: "A Glimpse of Vulnerability",
status: 0,
location: "BarGildedLily",
passage: "BrandiVulnerableAtBar",
period: ["evening", "night"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_lust: 10, brandi_corruption: 5 },
requirements: { type: "scene", id: "BrandiLetterDisposed" },
replay: {
label: "Find her at the bar again",
actType: "tease",
character: "openWorldGirls.brandi",
locations: ["BarGildedLily"],
periods: ["evening", "night"],
requirements: { lust: 18, love: 5 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 14 } },
cooldownHours: 12,
videos: ["img/chars/brandi/etc/brandi_drink.jpg"],
passage: "ReplayBrandiBarVulnerability",
cooldownLine: "She lifts her glass and looks past you, deliberately. \"Find another stool tonight, dear. I've reached my charity limit.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS005": {
name: "Paying Her First Real Debt",
status: 0,
location: "BedroomBrandi",
passage: "BrandiBlackmailHandjob",
period: ["night"],
day: ["Sunday"],
character: "brandi",
stats: { brandi_lust: 35, brandi_corruption: 20, brandi_love: -5 },
requirements: { type: "mission", id: "BrandiSearchForKey" },
replay: {
label: "Collect another payment",
actType: "handjob",
character: "openWorldGirls.brandi",
locations: ["BedroomBrandi"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 0 },
cost: { energy: 15, time: 1 },
statsApplied: { player: { lust: 25, domination: 2 } },
cooldownHours: 16,
videos: [
"img/chars/brandi/brandi_first_handjob_scene/brandi_1_handjob.webm",
"img/chars/brandi/brandi_first_handjob_scene/brandi_2_handjob_topless.webm",
"img/chars/brandi/brandi_first_handjob_scene/brandi_3_handjob_topless_cum.webm"
],
passage: "ReplayBrandiBlackmailHJ",
cooldownLine: "She holds up a hand without looking at you. \"You've already collected today. *Once* a day. I'm not your wife.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"BS006": {
name: "Meeting Castellano",
status: 0,
location: "Motel",
passage: "BrandiDebtLoanShark",
period: ["afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "brandi",
stats: { player_gang_rep: 5 },
requirements: { type: "mission", id: "BrandiDebtReveal" }
},
"BS007": {
name: "Brandi's Debt Resolved",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiDebtResolved",
period: ["morning", "noon", "afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "brandi",
stats: { brandi_corruption: 15, brandi_love: 20 },
requirements: { type: "scene", id: "BrandiDebtLoanShark" }
},
"BS008": {
name: "Brandi's Debt Confession",
status: 0,
location: "LivingRoomBrandi",
passage: "BrandiDebtReveal",
period: ["afternoon", "evening"],
day: ["Saturday", "Sunday"],
character: "brandi",
stats: { brandi_corruption: 5 },
requirements: { type: "scene", id: "BrandiOverheardCall" }
},
/* BRANDI SCENES END */
/* VALERIE SCENES START */
"VS001": {
name: "A Post-Shower Encounter",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieTowelEncounter",
period: ["morning", "noon"],
day: ["Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 10, player_corruption: 2 },
requirements: { type: "mission", id: "ValerieFixGarden" },
replay: {
label: "Catch her in just a towel",
actType: "tease",
character: "openWorldGirls.valerie",
locations: ["LivingRoomValerie", "BathroomValerie"],
periods: ["morning", "noon"],
requirements: { lust: 8 },
cost: { energy: 5, time: 1 },
statsApplied: { player: { lust: 8 } },
cooldownHours: 8,
videos: [
"img/chars/valerie/towel/valerie_1_sneak_towel.jpg",
"img/chars/valerie/towel/valerie_2_sneak_towel.jpg",
"img/chars/valerie/towel/valerie_3_close_pussy.jpg",
"img/chars/valerie/towel/valerie_4_laugh.jpg",
"img/chars/valerie/towel/valerie_5_tease_bye_bye.jpg"
],
passage: "ReplayValerieTowel",
cooldownLine: "\"The energy is still settling from this morning, beautiful. The body needs space.\" She wraps the towel tighter.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS002": {
name: "Yoga Session Glimpse",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieYogaSessionGlimpse",
period: ["morning"],
day: ["Saturday"],
character: "valerie",
stats: { valerie_lust: 12, player_corruption: 3 },
requirements: { type: "scene", id: "ValerieTowelEncounter" },
replay: {
label: "Watch her flow through the poses",
actType: "tease",
character: "openWorldGirls.valerie",
locations: ["LivingRoomValerie"],
periods: ["morning", "noon"],
requirements: { lust: 10 },
cost: { energy: 6, time: 1 },
statsApplied: { player: { lust: 10 } },
cooldownHours: 10,
videos: ["img/chars/valerie/yoga/valerie_1_yoga_solo.webm"],
passage: "ReplayValerieYoga",
cooldownLine: "\"My breathwork is delicate today, beautiful. Watch from a distance and let the chakras restore.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS003": {
name: "Poolside Gratitude",
status: 0,
location: "PoolValerie",
passage: "ValeriePoolsideThanks",
period: ["afternoon"],
day: ["Saturday"],
character: "valerie",
stats: { valerie_lust: 15, valerie_love: 5 },
requirements: { type: "mission", id: "ValerieMoveCanvas" },
replay: {
label: "Join her by the water again",
actType: "tease",
character: "openWorldGirls.valerie",
locations: ["PoolValerie"],
periods: ["noon", "afternoon"],
requirements: { lust: 12, love: 3 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 10,
videos: [
"img/chars/valerie/pool/valerie_1_enter_pool.webm",
"img/chars/valerie/pool/valerie_2_relaxing_at_pool.webm",
"img/chars/valerie/pool/valerie_3_relaxing_final.webm"
],
passage: "ReplayValeriePoolside",
cooldownLine: "\"The water remembers the gratitude already, beautiful. We don't need to repeat the ceremony today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS004": {
name: "Energy Release Session",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieEnergyReleaseHJ",
period: ["evening"],
day: ["Saturday"],
character: "valerie",
stats: { valerie_lust: 25, valerie_love: 5, valerie_corruption: 10 },
requirements: { type: "scene", id: "ValeriePoolsideThanks" },
replay: {
label: "Ask her for another energy release",
actType: "handjob",
character: "openWorldGirls.valerie",
locations: ["LivingRoomValerie"],
periods: ["evening"],
requirements: { lust: 20, love: 8 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 14,
videos: [
"img/chars/valerie/first_handjob/valerie_1_initial_handjob.webm",
"img/chars/valerie/first_handjob/valerie_2_continue_handjob.webm",
"img/chars/valerie/first_handjob/valerie_3_intense_handjob.webm",
"img/chars/valerie/first_handjob/valerie_4_intense_handjob_topless.webm",
"img/chars/valerie/first_handjob/valerie_5_intense_handjob_topless_cum.webm"
],
passage: "ReplayValerieEnergyHJ",
cooldownLine: "\"The cosmic well is empty for today, beautiful. Even healers must rest.\" She kisses your forehead.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS005": {
name: "Chakra Check-up",
status: 0,
location: "LivingRoomValerie",
passage: "ValerieChakraCheckupHJ",
period: ["morning", "noon"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_lust: 30, valerie_love: 7, valerie_corruption: 15 },
requirements: { type: "scene", id: "ValerieEnergyReleaseHJ" },
replay: {
label: "Request another chakra check-up",
actType: "handjob",
character: "openWorldGirls.valerie",
locations: ["LivingRoomValerie"],
periods: ["morning", "noon"],
requirements: { lust: 25, love: 10 },
cost: { energy: 14, time: 1 },
statsApplied: { player: { lust: 20 } },
cooldownHours: 14,
videos: [
"img/chars/valerie/second_handjob/valerie_1_initial_handjob.webm",
"img/chars/valerie/second_handjob/valerie_2_continue_handjob.webm",
"img/chars/valerie/second_handjob/valerie_3_intense_handjob_topless.webm",
"img/chars/valerie/second_handjob/valerie_4_intense_handjob_topless.webm",
"img/chars/valerie/second_handjob/valerie_5_intense_handjob_topless_cum.webm"
],
passage: "ReplayValerieChakraHJ",
cooldownLine: "\"The energetic body is overstimulated today. Tomorrow we'll align you slowly. Trust the universe.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS006": {
name: "A Deeper Alignment",
status: 0,
location: "BedroomValerie",
passage: "ValerieDeeperAlignmentTJ_HJ",
period: ["evening"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_lust: 40, valerie_love: 10, valerie_corruption: 20 },
requirements: { type: "mission", id: "ValerieHouseCleansing" },
replay: {
label: "Seek a deeper alignment",
actType: "titsjob",
character: "openWorldGirls.valerie",
locations: ["BedroomValerie"],
periods: ["evening"],
requirements: { lust: 32, love: 12 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 25 } },
cooldownHours: 18,
videos: [
"img/chars/valerie/third_handjob/valerie_3_titsjob.webm",
"img/chars/valerie/third_handjob/valerie_4_intense_flashinglight.webm",
"img/chars/valerie/third_handjob/valerie_5_intense_flashinglight_tease.webm",
"img/chars/valerie/third_handjob/valerie_6_intense_flashinglight_close_pussy.webm",
"img/chars/valerie/third_handjob/valerie_7_intense_handjob_close_pussy_cum.webm"
],
passage: "ReplayValerieDeeperAlignment",
cooldownLine: "\"Such intimate work cannot be rushed, dear. Let yesterday's alignment integrate. We'll continue tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS007": {
name: "Primal Energy Transfer",
status: 0,
location: "BedroomValerie",
passage: "ValeriePrimalEnergyBJ",
period: ["night"],
day: ["Sunday"],
character: "valerie",
stats: { valerie_lust: 50, valerie_love: 15, valerie_corruption: 25 },
requirements: { type: "scene", id: "ValerieDeeperAlignmentTJ_HJ" },
replay: {
label: "Channel her primal energy",
actType: "blowjob",
character: "openWorldGirls.valerie",
locations: ["BedroomValerie"],
periods: ["night"],
requirements: { lust: 40, love: 18 },
cost: { energy: 22, time: 2 },
statsApplied: { player: { lust: 32 } },
cooldownHours: 24,
videos: [
"img/chars/valerie/first_blowjob/valerie_1_initial_blowjob.webm",
"img/chars/valerie/first_blowjob/valerie_2_blowjob.webm",
"img/chars/valerie/first_blowjob/valerie_3_intense_blowjob.webm",
"img/chars/valerie/first_blowjob/valerie_4_intense_deepthroat.webm",
"img/chars/valerie/first_blowjob/valerie_5_intense_deepthroat_continue.webm",
"img/chars/valerie/first_blowjob/valerie_6_masturbate_facial_cum.webm"
],
passage: "ReplayValeriePrimalBJ",
cooldownLine: "\"Last night's transfer was sacred. Such intensity demands rest from both of us. Tomorrow, beautiful.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* Phase 2 scenes */
"VS008": {
name: "Steam and Silence",
status: 0,
location: "BathroomValerie",
passage: "ValerieShowerSpy",
period: ["morning", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 35, valerie_love: 8, valerie_corruption: 15, player_corruption: 5 },
requirements: { type: "mission", id: "ValerieSteamInvitation" },
replay: {
label: "Watch her shower again",
actType: "voyeur",
character: "openWorldGirls.valerie",
locations: ["BathroomValerie"],
periods: ["morning", "evening"],
requirements: { lust: 28, love: 15 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 20 } },
cooldownHours: 16,
videos: [
"img/chars/valerie/shower/valerie_first_shower_1.mp4",
"img/chars/valerie/shower/valerie_first_shower_2.mp4",
"img/chars/valerie/shower/valerie_first_shower_3.mp4",
"img/chars/valerie/shower/valerie_first_shower_4.mp4",
"img/chars/valerie/shower/valerie_first_shower_5.mp4",
"img/chars/valerie/shower/valerie_first_shower_6.mp4"
],
passage: "ReplayValerieShowerSpy",
cooldownLine: "\"The water already held you once today, beautiful. Let the steam settle.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS009": {
name: "Caught in the Bathroom",
status: 0,
location: "BathroomValerie",
passage: "ValeriePrivateFrequency",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 30, valerie_love: 10, valerie_corruption: 12 },
requirements: { type: "mission", id: "ValeriePrivateTools" },
replay: {
label: "Catch her mid-private moment again",
actType: "tease",
character: "openWorldGirls.valerie",
locations: ["BathroomValerie"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 12 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 16 } },
cooldownHours: 14,
videos: [
"img/chars/valerie/bathroom/valerie_bathroom_vibrator.jpg"
],
passage: "ReplayValeriePrivateFrequency",
cooldownLine: "\"Not again today, beautiful. The body needs space after honesty like that.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"VS012": {
name: "Sacred Union",
status: 0,
location: "BedroomValerie",
passage: "ValerieSacredUnion",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "valerie",
stats: { valerie_lust: 60, valerie_love: 25, valerie_corruption: 30, player_corruption: 10 },
requirements: { type: "mission", id: "ValerieAlignmentEvening" },
replay: {
label: "Align with her again",
actType: "sex",
character: "openWorldGirls.valerie",
locations: ["BedroomValerie"],
periods: ["evening", "night"],
requirements: { lust: 45, love: 30 },
cost: { energy: 18, time: 1 },
statsApplied: { player: { lust: 40 } },
cooldownHours: 24,
videos: [
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_1.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_4.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_5.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_6.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_7.mp4",
"img/chars/valerie/first_yoga_sex/valerie_first_yoga_sex_8.mp4"
],
passage: "ReplayValerieSacredUnion",
cooldownLine: "\"Last night's union is still humming in both of us. Let it integrate, beautiful.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* VALERIE SCENES END */
/* KENZIE SCENES START */
"KS001": {
name: "An Open Door",
status: 0,
location: "BedroomKenzie",
passage: "KenzieCaughtMasturbating",
period: ["evening", "night"],
day: ["Wednesday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 20, kenzie_corruption: 15, player_corruption: 5 },
requirements: { type: "mission", id: "KenziePizzaRequest" },
replay: {
label: "Catch her with her hand down again",
actType: "masturbation",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 18 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 14, corruption: 1 } },
cooldownHours: 10,
videos: [
"img/chars/kenzie/kenzie_caught_mastrubate/kenzie_1_masturbate.webm",
"img/chars/kenzie/kenzie_caught_mastrubate/kenzie_2_masturbate_orgasm_skirt.webm",
"img/chars/kenzie/kenzie_caught_mastrubate/kenzie_3_player_interupt.webm"
],
passage: "ReplayKenzieCaughtMasturbating",
cooldownLine: "\"Bro. *Knock*. I literally already did the show today. Get out.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS002": {
name: "A Little Gratitude",
status: 0,
location: "BedroomKenzie",
passage: "KenzieGratitudeHJ",
period: ["night"],
day: ["Wednesday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 30, kenzie_love: 5, kenzie_corruption: 20, kenzie_rebellion: 5 },
requirements: { type: "scene", id: "KenzieCaughtMasturbating" },
replay: {
label: "Cash in another favor",
actType: "handjob",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 5 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 14,
videos: [
"img/chars/kenzie/kenzie_first_handjob/kenzie_1_tease.webm",
"img/chars/kenzie/kenzie_first_handjob/kenzie_2_handjob.webm",
"img/chars/kenzie/kenzie_first_handjob/kenzie_3_handjob_cum.webm"
],
passage: "ReplayKenzieGratitudeHJ",
cooldownLine: "\"Dude, I'm not your whore. One favor, one day. Beat it.\" She doesn't even look up from her phone.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS003": {
name: "A Dare in the Dark",
status: 0,
location: "BedroomKenzie",
passage: "KenzieDaringBlowjob",
period: ["night"],
day: ["Friday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 45, kenzie_love: 5, kenzie_corruption: 25 },
requirements: { type: "mission", id: "KenzieBarEncounter" },
replay: {
label: "Dare her again",
actType: "blowjob",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["night"],
requirements: { lust: 35, love: 5 },
cost: { energy: 18, time: 1 },
statsApplied: { player: { lust: 28 } },
cooldownHours: 18,
videos: [
"img/chars/kenzie/kenzie_first_blowjob/kenzie_1_blowjob_initial.webm",
"img/chars/kenzie/kenzie_first_blowjob/kenzie_2_suck_balls.webm",
"img/chars/kenzie/kenzie_first_blowjob/kenzie_3_blowjob_intense.webm",
"img/chars/kenzie/kenzie_first_blowjob/kenzie_4_blowjob_intense_topless.webm",
"img/chars/kenzie/kenzie_first_blowjob/kenzie_5_facial_cum.webm"
],
passage: "ReplayKenzieDaringBJ",
cooldownLine: "\"My jaw is dead, dude. Already did the dare. Pick a new one tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS004": {
name: "Showing Off Her Skills",
status: 0,
location: "BedroomKenzie",
passage: "KenzieDeepthroatFacefuck",
period: ["night"],
day: ["Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 60, kenzie_love: -5, kenzie_corruption: 35, kenzie_rebellion: 15 },
requirements: { type: "scene", id: "KenzieDaringBlowjob" },
replay: {
label: "Show me what you can do",
actType: "blowjob",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["night"],
requirements: { lust: 50, love: 0 },
cost: { energy: 22, time: 2 },
statsApplied: { player: { lust: 35, domination: 2 } },
cooldownHours: 22,
videos: [
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_1_tease_blowjob.webm",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_2_initial_deepthroat.webm",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_3_lickballs_deepthroat.webm",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_5_real_deepthroat.webm",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_6_real_deepthroat.webm",
"img/chars/kenzie/kenzie_first_deepthroat/kenzie_7_deepthroat_cum.webm"
],
passage: "ReplayKenzieDeepthroat",
cooldownLine: "\"My throat is *raw*, you sick freak. Wait until tomorrow. Or buy me ice cream first. Your choice.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* KENZIE PHASE 2 SCENE DEFS */
"KS006": {
name: "Kitchen Counter Show",
status: 0,
location: "KitchenValerie",
passage: "KenzieKitchenTease",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 25, kenzie_corruption: 15, kenzie_rebellion: 10 },
requirements: { type: "mission", id: "KenzieFridgeRaid" },
replay: {
label: "Kitchen show again",
actType: "tease",
character: "openWorldGirls.kenzie",
locations: ["KitchenValerie"],
periods: ["evening", "night"],
requirements: { lust: 20 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 15 } },
cooldownHours: 14,
videos: [
"img/chars/kenzie/kitchen_video/kenzie_babygirl_kitchen.mp4",
"img/chars/kenzie/kitchen_video/kenzie_kitchen_sprayer.mp4"
],
passage: "ReplayKenzieKitchenTease",
cooldownLine: "Kitchen's closed. Spill story only works once a day.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS008": {
name: "Oiled Couch",
status: 0,
location: "LivingRoomValerie",
passage: "KenzieOiledCouch",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 30, kenzie_corruption: 18, kenzie_rebellion: 8 },
requirements: { type: "mission", id: "KenzieCoverForMe" },
replay: {
label: "Couch oil encore",
actType: "fingering",
character: "openWorldGirls.kenzie",
locations: ["LivingRoomValerie"],
periods: ["evening", "night"],
requirements: { lust: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 16,
videos: ["img/chars/kenzie/couch/kenzie_oiled_couch_fingering.mp4"],
passage: "ReplayKenzieOiledCouch",
cooldownLine: "Couch is sticky enough for today. Tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS009": {
name: "First Gym Sex",
status: 0,
location: "Gym",
passage: "KenzieFirstGymSex",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
character: "kenzie",
stats: { kenzie_lust: 50, kenzie_love: 10, kenzie_corruption: 30, kenzie_rebellion: 15 },
requirements: { type: "mission", id: "KenzieAfterHours" },
replay: {
label: "After-hours gym again",
actType: "sex",
character: "openWorldGirls.kenzie",
locations: ["Gym"],
periods: ["evening", "night"],
requirements: { lust: 40 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 30, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/kenzie/gymsex/kenzie_first_gymsex_1.mp4",
"img/chars/kenzie/gymsex/kenzie_first_gymsex_4.mp4",
"img/chars/kenzie/gymsex/kenzie_first_gymsex_7.mp4",
"img/chars/kenzie/gymsex/kenzie_first_gymsex_10.mp4"
],
passage: "ReplayKenzieFirstGymSex",
cooldownLine: "Gym sex twice in one day is how you get banned. Chill.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS010": {
name: "Home Creampie",
status: 0,
location: "BedroomKenzie",
passage: "KenzieHomeGush",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 55, kenzie_love: 12, kenzie_corruption: 35 },
requirements: { type: "mission", id: "KenzieLeaveTheDoor" },
replay: {
label: "Home creampie again",
actType: "sex",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 45 },
cost: { energy: 20, time: 2 },
statsApplied: { player: { lust: 35, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/kenzie/gush/kenzie_first_gush_1.mp4",
"img/chars/kenzie/gush/kenzie_first_gush_6.mp4",
"img/chars/kenzie/gush/kenzie_first_gush_10.mp4",
"img/chars/kenzie/gush/kenzie_first_gush_12.mp4"
],
passage: "ReplayKenzieHomeGush",
cooldownLine: "Sheets are already a crime scene. Tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS011": {
name: "Collections Payment",
status: 0,
location: "BedroomKenzie",
passage: "KenzieLandlordCollect",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 45, kenzie_corruption: 40, kenzie_rebellion: 12 },
requirements: { type: "mission", id: "KenzieCollectionsCall" },
replay: {
label: "Collect again",
actType: "sex",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 40 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 28, domination: 2 } },
cooldownHours: 20,
videos: [
"img/chars/kenzie/landlord/kenzie_first_landlordsex_1.mp4",
"img/chars/kenzie/landlord/kenzie_first_landlordsex_4.mp4",
"img/chars/kenzie/landlord/kenzie_first_landlordsex_8.mp4"
],
passage: "ReplayKenzieLandlordCollect",
cooldownLine: "Collections office is closed. Come back tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS012": {
name: "Pool Tab Settled",
status: 0,
location: "PoolValerie",
passage: "KenziePoolDebtSex",
period: ["noon", "afternoon"],
day: ["Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 50, kenzie_corruption: 40, kenzie_rebellion: 15 },
requirements: { type: "mission", id: "KenziePoolTab" },
replay: {
label: "Pool collection again",
actType: "sex",
character: "openWorldGirls.kenzie",
locations: ["PoolValerie"],
periods: ["noon", "afternoon"],
requirements: { lust: 45 },
cost: { energy: 20, time: 2 },
statsApplied: { player: { lust: 32, corruption: 2 } },
cooldownHours: 22,
videos: [
"img/chars/kenzie/poolsex/kenzie_second_landlordsex_1.mp4",
"img/chars/kenzie/poolsex/kenzie_second_landlordsex_7.mp4",
"img/chars/kenzie/poolsex/kenzie_second_landlordsex_12.mp4",
"img/chars/kenzie/poolsex/kenzie_second_landlordsex_15.mp4"
],
passage: "ReplayKenziePoolDebtSex",
cooldownLine: "Pool's closed for public indecency — namely us. Tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS013": {
name: "Deepthroat Show-Off",
status: 0,
location: "BedroomKenzie",
passage: "KenzieDeepthroatShowoff",
period: ["evening", "night"],
day: ["Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 55, kenzie_corruption: 40, kenzie_rebellion: 20 },
requirements: { type: "scene", id: "KenzieLandlordCollect" },
replay: {
label: "Show-off throat again",
actType: "blowjob",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["evening", "night"],
requirements: { lust: 50 },
cost: { energy: 16, time: 2 },
statsApplied: { player: { lust: 30, domination: 1 } },
cooldownHours: 20,
videos: [
"img/chars/kenzie/deepthroat2/kenzie_first_deepthroat_1.mp4",
"img/chars/kenzie/deepthroat2/kenzie_second_deepthroat_6.mp4",
"img/chars/kenzie/deepthroat2/kenzie_third_deepthroat_12.mp4"
],
passage: "ReplayKenzieDeepthroatShowoff",
cooldownLine: "Throat is raw. Ice cream tax paid. Tomorrow.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"KS016": {
name: "Anal Finale",
status: 0,
location: "BedroomKenzie",
passage: "KenzieAnalFinale",
period: ["night"],
day: ["Friday", "Saturday", "Sunday"],
character: "kenzie",
stats: { kenzie_lust: 60, kenzie_love: 8, kenzie_corruption: 50, kenzie_rebellion: 15 },
requirements: { type: "scene", id: "KenzieDeepthroatShowoff" },
replay: {
label: "Anal dare again",
actType: "anal",
character: "openWorldGirls.kenzie",
locations: ["BedroomKenzie"],
periods: ["night"],
requirements: { lust: 55 },
cost: { energy: 22, time: 2 },
statsApplied: { player: { lust: 35, corruption: 3 } },
cooldownHours: 24,
videos: [
"img/chars/kenzie/analsex/kenzie_first_analsex_1.mp4",
"img/chars/kenzie/analsex/kenzie_first_analsex_5.mp4",
"img/chars/kenzie/analsex/kenzie_first_analsex_10.mp4"
],
passage: "ReplayKenzieAnalFinale",
cooldownLine: "Absolutely not twice in one day. I am walking funny already.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* KENZIE SCENES END */
/* JENNA SCENES START */
"JS001": {
name: "A Glimpse of Her Routine",
status: 0,
location: "GardenJenna",
passage: "JennaYogaGlimpse",
period: ["morning"],
day: ["Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 10 },
requirements: { type: "mission", id: "JennaFixBike" },
replay: {
label: "Watch her morning yoga again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["GardenJenna", "LivingRoomJenna"],
periods: ["morning"],
requirements: { lust: 6 },
cost: { energy: 5, time: 1 },
statsApplied: { player: { lust: 8 } },
cooldownHours: 8,
videos: [
"img/chars/jenna/yoga/jenna_yoga_1.jpg",
"img/chars/jenna/yoga/jenna_yoga_5.jpg",
"img/chars/jenna/yoga/jenna_yoga_7.webp",
"img/chars/jenna/yoga/jenna_yoga_18.webp"
],
passage: "ReplayJennaYoga",
cooldownLine: "\"Oh — I thought you'd already... I mean, I'm so glad you came by, but I really need to focus on this practice. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS002": {
name: "A Moment of Insecurity",
status: 0,
location: "LivingRoomJenna",
passage: "JennaPhotoshootInsecurity",
period: ["afternoon"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 5, jenna_loneliness: -10 },
requirements: { type: "mission", id: "JennaGardenHelp" },
replay: {
label: "Help with her photoshoot again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["afternoon"],
requirements: { lust: 8, love: 5 },
cost: { energy: 7, time: 1 },
statsApplied: { player: { lust: 10 } },
cooldownHours: 10,
videos: [
"img/chars/jenna/photoshoot/jenna_photoshoot_3.jpg",
"img/chars/jenna/photoshoot/jenna_photoshoot_5.jpg",
"img/chars/jenna/photoshoot/jenna_photoshoot_7.jpg",
"img/chars/jenna/photoshoot/jenna_photoshoot_10.jpg",
"img/chars/jenna/photoshoot/jenna_photoshoot_11.jpg"
],
passage: "ReplayJennaPhotoshoot",
cooldownLine: "She tucks the camera away. \"You've already made me feel beautiful enough today. Save some for tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS003": {
name: "Seeking Validation",
status: 0,
location: "LivingRoomJenna",
passage: "JennaTryingOnClothes",
period: ["evening"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_love: 10, jenna_lust: 20 },
requirements: { type: "mission", id: "JennaMakeProteinShake" },
replay: {
label: "Help her try on outfits again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna", "BedroomJenna"],
periods: ["evening"],
requirements: { lust: 15, love: 8 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 14 } },
cooldownHours: 12,
videos: [
"img/chars/jenna/trying_clothes/jenna_trying_clothes_3.jpg",
"img/chars/jenna/trying_clothes/jenna_trying_clothes_5.jpg",
"img/chars/jenna/trying_clothes/jenna_trying_clothes_8.jpg",
"img/chars/jenna/trying_clothes/jenna_trying_clothes_10.jpg",
"img/chars/jenna/trying_clothes/jenna_trying_clothes_10.5.jpg"
],
passage: "ReplayJennaTryingClothes",
cooldownLine: "\"I've already changed five times for you today. My dignity needs the night off. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS004": {
name: "Spying on a Private Moment",
status: 0,
location: "BathroomJenna",
passage: "JennaBathroomSpy",
period: ["evening"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_lust: 25, player_corruption: 10 },
requirements: { type: "scene", id: "JennaTryingOnClothes" },
replay: {
label: "Slip down the hall to her bath",
actType: "shower",
character: "openWorldGirls.jenna",
locations: ["BathroomJenna", "LivingRoomJenna"],
periods: ["evening", "night"],
requirements: { lust: 18, love: 8 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 16, corruption: 1 } },
cooldownHours: 12,
videos: [
"img/chars/jenna/bathtub/jenna_1_enter_bathtub.webm",
"img/chars/jenna/bathtub/jenna_2_bathtub_washing_tits.webm",
"img/chars/jenna/bathtub/jenna_3_bathtub_standing_wash.webm",
"img/chars/jenna/bathtub/jenna_4_baththub_masturbating.webm",
"img/chars/jenna/bathtub/jenna_5_bathtub_bye.webm"
],
passage: "ReplayJennaBathroomSpy",
cooldownLine: "She glances toward the door. \"Twice in one bath I'd start *expecting* you. We can't have that. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS005": {
name: "An 'Accidental' Reveal",
status: 0,
location: "BedroomJenna",
passage: "JennaRobeDrop",
period: ["afternoon"],
day: ["Saturday"],
character: "jenna",
stats: { jenna_lust: 30, jenna_corruption: 15, jenna_loneliness: -5 },
requirements: { type: "mission", id: "JennaFixBedroomWindow" },
replay: {
label: "Drop by her bedroom",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening"],
requirements: { lust: 22, love: 10 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 14,
videos: [
"img/chars/jenna/robe/jenna_1_robe.webm",
"img/chars/jenna/robe/jenna_2_robe_drop.webm"
],
passage: "ReplayJennaRobeDrop",
cooldownLine: "She pulls the robe tight at her throat. \"Once a day. Otherwise it stops being an *accident*. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS006": {
name: "A Private Pool Show",
status: 0,
location: "PoolJenna",
passage: "JennaNudePoolMasturbation",
period: ["afternoon"],
day: ["Sunday"],
character: "jenna",
stats: { jenna_lust: 40, jenna_corruption: 20, jenna_love: 5 },
requirements: { type: "scene", id: "JennaRobeDrop" },
replay: {
label: "Watch her at the pool again",
actType: "masturbation",
character: "openWorldGirls.jenna",
locations: ["PoolJenna"],
periods: ["afternoon"],
requirements: { lust: 30, love: 12 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 24, corruption: 1 } },
cooldownHours: 16,
videos: [
"img/chars/jenna/pool_masturbation/jenna_1_tease_taking_off_clothes.webm",
"img/chars/jenna/pool_masturbation/jenna_2_tease_talking_naked.webm",
"img/chars/jenna/pool_masturbation/jenna_3_start_masturbation.webm",
"img/chars/jenna/pool_masturbation/jenna_4_intense_masturbation.webm",
"img/chars/jenna/pool_masturbation/jenna_5_intense_close_masturbation.webm"
],
passage: "ReplayJennaPoolMasturbation",
cooldownLine: "She sinks lower in the water and shakes her head with a sad smile. \"Not today, sweetheart. I have to keep *some* shame.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS007": {
name: "A Thank You for the Company",
status: 0,
location: "LivingRoomJenna",
passage: "JennaGratefulHandjob",
period: ["evening"],
day: ["Sunday"],
character: "jenna",
stats: { jenna_lust: 50, jenna_corruption: 25, jenna_love: 15 },
requirements: { type: "scene", id: "JennaNudePoolMasturbation" },
replay: {
label: "Let her thank you again",
actType: "handjob",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna", "BedroomJenna"],
periods: ["evening", "night"],
requirements: { lust: 38, love: 18 },
cost: { energy: 16, time: 1 },
statsApplied: { player: { lust: 28 } },
cooldownHours: 18,
videos: [
"img/chars/jenna/first_handjob/jenna_3_start_handjob.webm",
"img/chars/jenna/first_handjob/jenna_4_intensify_handjob.webm",
"img/chars/jenna/first_handjob/jenna_5_tease_handjob.webm",
"img/chars/jenna/first_handjob/jenna_6_intense_handjob_cum.webm"
],
passage: "ReplayJennaGratefulHJ",
cooldownLine: "She tucks her hair behind her ear and looks at her hands. \"I... I feel like I've already thanked you twice today. Save the rest for tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* JENNA PHASE 2 SCENES DEFS */
"JS008": {
name: "Private Lapdance",
status: 0,
location: "LivingRoomJenna",
passage: "JennaLapdance",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 30, jenna_love: 10, jenna_corruption: 12, jenna_loneliness: -10, jenna_approval: 8 },
requirements: { type: "mission", id: "JennaBareGarden" },
replay: {
label: "Ask for another private dance",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["evening", "night"],
requirements: { lust: 25, love: 15 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 16,
videos: ["img/chars/jenna/lapdance/jenna_first_lapdance.mp4"],
passage: "ReplayJennaLapdance",
cooldownLine: "She blushes and folds her arms. \"Once a day is already more brave than I feel. Tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS009": {
name: "Couch Strip",
status: 0,
location: "LivingRoomJenna",
passage: "JennaCouchStrip",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 35, jenna_love: 8, jenna_corruption: 15, jenna_loneliness: -8, jenna_approval: 6 },
requirements: { type: "scene", id: "JennaLapdance" },
replay: {
label: "Join her on the couch again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["evening", "night"],
requirements: { lust: 28, love: 16 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 20 } },
cooldownHours: 16,
videos: [
"img/chars/jenna/couch/jenna_first_couch_1.mp4",
"img/chars/jenna/couch/jenna_first_couch_2.mp4"
],
passage: "ReplayJennaCouchStrip",
cooldownLine: "She pulls a throw over her knees. \"The couch has been scandalous enough for today.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS010": {
name: "Slow Undress",
status: 0,
location: "BedroomJenna",
passage: "JennaSlowUndress",
period: ["afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 28, jenna_love: 12, jenna_corruption: 10, jenna_approval: 10, jenna_loneliness: -8 },
requirements: { type: "mission", id: "JennaClosetConfidence" },
replay: {
label: "Watch her undress for you again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening", "night"],
requirements: { lust: 22, love: 14 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 16 } },
cooldownHours: 14,
videos: ["img/chars/jenna/undress/jenna_first_undress.mp4"],
passage: "ReplayJennaSlowUndress",
cooldownLine: "She holds her blouse closed. \"I already gave you that show today. Save me some mystery.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS011": {
name: "Lingerie Pose",
status: 0,
location: "BedroomJenna",
passage: "JennaLingeriePose",
period: ["afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 32, jenna_love: 10, jenna_corruption: 12, jenna_approval: 8 },
requirements: { type: "scene", id: "JennaSlowUndress" },
replay: {
label: "Ask for the lingerie pose again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening", "night"],
requirements: { lust: 26, love: 15 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 18 } },
cooldownHours: 14,
videos: ["img/chars/jenna/lingerie/jenna_first_lingerie.mp4"],
passage: "ReplayJennaLingeriePose",
cooldownLine: "She laughs softly. \"My knees are already sore from posing. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS012": {
name: "Wardrobe Show",
status: 0,
location: "BedroomJenna",
passage: "JennaWardrobeShow",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 30, jenna_love: 12, jenna_corruption: 10, jenna_approval: 10, jenna_loneliness: -6 },
requirements: { type: "scene", id: "JennaLingeriePose" },
replay: {
label: "Run another wardrobe show",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening"],
requirements: { lust: 24, love: 16 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 16 } },
cooldownHours: 14,
videos: ["img/chars/jenna/wardrobe/jenna_first_wardrobe.mp4"],
passage: "ReplayJennaWardrobeShow",
cooldownLine: "She shuts the closet. \"Enough fashion for one day. I need the praise to last.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS013": {
name: "Bathroom Tease",
status: 0,
location: "BathroomJenna",
passage: "JennaBathroomTease",
/* evening only — keep mission→scene finish before midnight force-sleep */
period: ["evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 35, jenna_corruption: 15, jenna_love: 8, jenna_approval: 5 },
requirements: { type: "mission", id: "JennaNoPretending" },
replay: {
label: "Catch her bathroom tease again",
actType: "tease",
character: "openWorldGirls.jenna",
locations: ["BathroomJenna", "LivingRoomJenna"],
periods: ["evening"],
requirements: { lust: 28, love: 14 },
cost: { energy: 12, time: 1 },
statsApplied: { player: { lust: 20, corruption: 1 } },
cooldownHours: 16,
videos: ["img/chars/jenna/bathroom_video/jenna_first_bathroom.mp4"],
passage: "ReplayJennaBathroomTease",
cooldownLine: "She closes the door gently. \"Twice in one night and I will start leaving it unlocked on purpose.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS014": {
name: "First Blowjob",
status: 0,
location: "BedroomJenna",
passage: "JennaFirstBJ",
period: ["morning", "afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 45, jenna_love: 15, jenna_corruption: 20, jenna_loneliness: -12, jenna_approval: 12 },
requirements: { type: "mission", id: "JennaQuietMorning" },
replay: {
label: "Let her take you in her mouth again",
actType: "blowjob",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["morning", "afternoon", "evening", "night"],
requirements: { lust: 35, love: 20 },
cost: { energy: 16, time: 1 },
statsApplied: { player: { lust: 26 } },
cooldownHours: 18,
videos: [
"img/chars/jenna/bj/jenna_first_bj_1.mp4",
"img/chars/jenna/bj/jenna_first_bj_3.mp4",
"img/chars/jenna/bj/jenna_first_bj_5.mp4"
],
passage: "ReplayJennaFirstBJ",
cooldownLine: "She touches her lips. \"My jaw needs the night off. Come back tomorrow?\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS015": {
name: "Wrong Room",
status: 0,
location: "BedroomJenna",
passage: "JennaWrongRoom",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 40, jenna_corruption: 18, jenna_love: 10, jenna_approval: 6 },
requirements: { type: "scene", id: "JennaFirstBJ" },
replay: {
label: "Walk into the wrong room again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["evening", "night"],
requirements: { lust: 32, love: 18 },
cost: { energy: 16, time: 1 },
statsApplied: { player: { lust: 24, corruption: 1 } },
cooldownHours: 18,
videos: [
"img/chars/jenna/wrongroom/jenna_first_wrongroom_1.mp4",
"img/chars/jenna/wrongroom/jenna_first_wrongroom_3.mp4",
"img/chars/jenna/wrongroom/jenna_first_wrongroom_5.mp4"
],
passage: "ReplayJennaWrongRoom",
cooldownLine: "She shakes her head with a soft smile. \"Wrong room twice in one day is a habit. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS016": {
name: "Chair Night",
status: 0,
location: "LivingRoomJenna",
passage: "JennaChairNight",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 50, jenna_love: 15, jenna_corruption: 22, jenna_approval: 10, jenna_loneliness: -10 },
requirements: { type: "scene", id: "JennaYogaCardio" },
replay: {
label: "Take the chair with her again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna", "BedroomJenna"],
periods: ["evening", "night"],
requirements: { lust: 40, love: 22 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 28, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/jenna/chair/jenna_first_chair_1.mp4",
"img/chars/jenna/chair/jenna_first_chair_2.mp4",
"img/chars/jenna/chair/jenna_first_chair_3.mp4"
],
passage: "ReplayJennaChairNight",
cooldownLine: "She rests a hand on the chair back. \"My legs are still shaking from earlier. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS017": {
name: "Yoga Cardio",
status: 0,
location: "LivingRoomJenna",
passage: "JennaYogaCardio",
period: ["morning", "afternoon"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 55, jenna_love: 20, jenna_corruption: 30, jenna_loneliness: -15, jenna_approval: 15 },
requirements: { type: "mission", id: "JennaLastPose" },
replay: {
label: "Join her yoga cardio again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["morning", "afternoon"],
requirements: { lust: 42, love: 24 },
cost: { energy: 20, time: 2 },
statsApplied: { player: { lust: 32, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/jenna/yogacardio/jenna_first_yogacardio_1.mp4",
"img/chars/jenna/yogacardio/jenna_first_yogacardio_4.mp4",
"img/chars/jenna/yogacardio/jenna_first_yogacardio_7.mp4",
"img/chars/jenna/yogacardio/jenna_first_yogacardio_9.mp4"
],
passage: "ReplayJennaYogaCardio",
cooldownLine: "She rolls up her mat carefully. \"My body needs recovery time. Please — tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS018": {
name: "Photoshoot Sex",
status: 0,
location: "LivingRoomJenna",
passage: "JennaPhotoshootSex",
period: ["afternoon", "evening"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 48, jenna_love: 18, jenna_corruption: 25, jenna_approval: 14, jenna_loneliness: -12 },
requirements: { type: "mission", id: "JennaShootMeProperly" },
replay: {
label: "Shoot her properly again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna"],
periods: ["afternoon", "evening"],
requirements: { lust: 40, love: 22 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 28, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/jenna/photoshoot_video/jenna_first_photoshoot_1.mp4",
"img/chars/jenna/photoshoot_video/jenna_first_photoshoot_5.mp4",
"img/chars/jenna/photoshoot_video/jenna_first_photoshoot_9.mp4",
"img/chars/jenna/photoshoot_video/jenna_first_photoshoot_14.mp4"
],
passage: "ReplayJennaPhotoshootSex",
cooldownLine: "She covers the lens with her palm. \"The memory card is full of me today. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS019": {
name: "Lingerie Study",
status: 0,
location: "BedroomJenna",
passage: "JennaLingerieStud",
period: ["afternoon", "evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 50, jenna_love: 15, jenna_corruption: 28, jenna_approval: 12 },
requirements: { type: "scene", id: "JennaPhotoshootSex" },
replay: {
label: "Study her in lingerie again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["BedroomJenna"],
periods: ["afternoon", "evening", "night"],
requirements: { lust: 42, love: 22 },
cost: { energy: 18, time: 2 },
statsApplied: { player: { lust: 30, corruption: 2 } },
cooldownHours: 20,
videos: [
"img/chars/jenna/lingerie_stud/jenna_first_lingerie_stud_1.mp4",
"img/chars/jenna/lingerie_stud/jenna_first_lingerie_stud_5.mp4",
"img/chars/jenna/lingerie_stud/jenna_first_lingerie_stud_9.mp4",
"img/chars/jenna/lingerie_stud/jenna_first_lingerie_stud_12.mp4"
],
passage: "ReplayJennaLingerieStud",
cooldownLine: "She folds the lace carefully. \"I am still glowing from earlier. Let me keep some dignity until tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"JS020": {
name: "Emotional Debt",
status: 0,
location: "LivingRoomJenna",
passage: "JennaEmotionalDebt",
period: ["evening", "night"],
day: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
character: "jenna",
stats: { jenna_lust: 52, jenna_love: 22, jenna_corruption: 30, jenna_loneliness: -18, jenna_approval: 15 },
requirements: { type: "mission", id: "JennaMoreThanThanks" },
replay: {
label: "Collect on the favor ledger again",
actType: "sex",
character: "openWorldGirls.jenna",
locations: ["LivingRoomJenna", "BedroomJenna"],
periods: ["evening", "night"],
requirements: { lust: 42, love: 25 },
cost: { energy: 20, time: 2 },
statsApplied: { player: { lust: 30, corruption: 2 } },
cooldownHours: 22,
videos: [
"img/chars/jenna/debt/jenna_first_debt_1.mp4",
"img/chars/jenna/debt/jenna_first_debt_4.mp4",
"img/chars/jenna/debt/jenna_first_debt_7.mp4",
"img/chars/jenna/debt/jenna_first_debt_10.mp4"
],
passage: "ReplayJennaEmotionalDebt",
cooldownLine: "She touches your chest lightly. \"The ledger is empty for today. Fill it again tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/* JENNA PHASE 2 SCENES DEFS END */
/**************************************************/
/************ AUNT CAROL - MONTH LONG *************/
/**************************************************/
/*
----------------------------------------------------
FASE 1: A NOVA REALIDADE E A BARREIRA DO TABU (Semana 1)
----------------------------------------------------
*/
"CS014": {
name: "A Tense Dinner",
status: 0,
location: "Kitchen",
passage: "CarolTenseDinner",
period: "evening",
day: ["Saturday"],
character: "auntCarol",
stats: { love: 5, lust: -5 }, // Lust diminui devido à tensão/culpa dela
requirements: { type: "scene", id: "BathroomSpyScene" }
},
"CS015": {
name: "The First Relapse", // Blowjob #1 (Pós-Fim de Semana)
status: 0,
location: "LivingRoom",
passage: "CarolFirstRelapseBJ",
period: "night",
day: ["Tuesday"],
character: "auntCarol",
stats: { lust: 30, corruption: 10, love: 5 },
requirements: { type: "mission", id: "CarolFixFaucet" },
replay: {
label: "Lock eyes with her on the couch",
actType: "blowjob",
character: "auntCarol",
locations: ["LivingRoom"],
periods: ["evening", "night"],
requirements: { lust: 40, love: 25 },
cost: { energy: 15, time: 1 },
statsApplied: { auntCarol: { lust: 10, corruption: 5 }, player: { lust: 20 } },
cooldownHours: 18,
videos: [
"img/chars/carol/blowjob/alexapearl_blowjob_post_bath_1.webm",
"img/chars/carol/blowjob/alexapearl_blowjob_post_bath_2.webm"
],
passage: "ReplayCarolBlowjob",
cooldownLine: "\"Honey, I love you, but my jaw needs a recovery day. Tomorrow.\" She winks and goes back to her wine.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/*
----------------------------------------------------
FASE 2: ACEITAÇÃO E EXPLORAÇÃO (Semana 1-2)
----------------------------------------------------
*/
"CS016": {
name: "A Proper 'Thank You'", // Blowjob #2
status: 0,
location: "BedroomCarol",
passage: "CarolThankYouBJ",
period: "night",
day: ["Thursday"],
character: "auntCarol",
stats: { lust: 35, love: 10 },
requirements: { type: "mission", id: "CarolHelpAngelaRoses" },
replay: {
label: "Catch her eye in her bedroom",
actType: "blowjob",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 50, love: 30 },
cost: { energy: 15, time: 1 },
statsApplied: { auntCarol: { lust: 10, corruption: 5 }, player: { lust: 25 } },
cooldownHours: 18,
videos: [
"img/chars/carol/blowjob/alexapearl_blowjob_pov_cum_1.webm",
"img/chars/carol/blowjob/alexapearl_blowjob_pov_cum_2.webm",
"img/chars/carol/blowjob/alexapearl_blowjob_pov_cum_3.webm"
],
passage: "ReplayCarolThankYouBJ",
cooldownLine: "\"Sweetie. Twice in the same evening even *I* can't manage. Tomorrow.\" She kisses your jaw and dismisses you.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS017": {
name: "Poolside Fun", // Blowjob #3
status: 0,
location: "Pool",
passage: "CarolPoolsideFunBJ",
period: "afternoon",
day: ["Friday"],
character: "auntCarol",
stats: { lust: 40, corruption: 10 },
requirements: { type: "mission", id: "CarolCleanPoolTogether" },
replay: {
label: "Slip down to the pool with her",
actType: "blowjob",
character: "auntCarol",
locations: ["Pool"],
periods: ["noon", "afternoon"],
requirements: { lust: 50, love: 25 },
cost: { energy: 12, time: 1 },
statsApplied: { auntCarol: { lust: 8, corruption: 5 }, player: { lust: 22 } },
cooldownHours: 16,
videos: ["img/chars/carol/blowjob/alexapearl_blowjob_at_pool.webm"],
passage: "ReplayCarolPoolsideBJ",
cooldownLine: "\"Already cooled off in the pool with you today, sweetie. The neighbors will start charging admission.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS018": {
name: "Crossing the Rubicon", // Blowjob que vira o Primeiro Sexo Vaginal
status: 0,
location: "BedroomCarol",
passage: "CarolFirstVaginal",
period: "night",
day: ["Saturday"],
character: "auntCarol",
stats: { lust: 60, love: 25, corruption: 20 },
requirements: { type: "mission", id: "CarolCookingTogether" },
replay: {
label: "Lock her bedroom door behind you",
actType: "vaginal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 70, love: 40 },
cost: { energy: 25, time: 2 },
statsApplied: { auntCarol: { lust: 15, corruption: 10, love: 2 }, player: { lust: 40 } },
cooldownHours: 24,
videos: [
"img/chars/carol/scene_first_vaginal/alexapearl_firstvaginal_4_vaginal_doggystyle.webm",
"img/chars/carol/scene_first_vaginal/alexapearl_firstvaginal_5_vaginal_second.webm",
"img/chars/carol/scene_first_vaginal/alexapearl_firstvaginal_6_vaginal_riding.webm"
],
passage: "ReplayCarolFirstVaginal",
cooldownLine: "\"Sweetie, my body needs a day. You drain me dry, you know that, right? Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/*
----------------------------------------------------
FASE 3: A RELAÇÃO SECRETA (Semana 2-3)
----------------------------------------------------
*/
"CS019": {
name: "An Afternoon Delight", // Sexo Vaginal #2
status: 0,
location: "BedroomCarol",
passage: "CarolAfternoonDelight",
period: "afternoon",
day: ["Sunday"],
character: "auntCarol",
stats: { lust: 50, love: 10 },
requirements: { type: "mission", id: "CarolLaundryDay" },
replay: {
label: "Slip into her bedroom mid-afternoon",
actType: "vaginal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["noon", "afternoon"],
requirements: { lust: 60, love: 35 },
cost: { energy: 22, time: 2 },
statsApplied: { auntCarol: { lust: 10, corruption: 5, love: 2 }, player: { lust: 35 } },
cooldownHours: 20,
videos: [
"img/chars/carol/scene_second_vaginal/alexapearl_2_spanking_ass_tease.webm",
"img/chars/carol/scene_second_vaginal/alexapearl_3_doggystyle.webm",
"img/chars/carol/scene_second_vaginal/alexapearl_4_doggystyle_side_vew.webm",
"img/chars/carol/scene_second_vaginal/alexapearl_5_doggystyle_pov_view_cum_in_back.webm"
],
passage: "ReplayCarolAfternoonDelight",
cooldownLine: "\"Twice in one afternoon? My laundry won't fold itself. Tomorrow.\" She squeezes your hand and shoos you out.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS020": {
name: "A Slow, Romantic Night", // Sexo Vaginal #3
status: 0,
location: "BedroomCarol",
passage: "CarolRomanticNight",
period: "night",
day: ["Monday"],
character: "auntCarol",
stats: { lust: 55, love: 20 },
requirements: { type: "mission", id: "CarolFixComputer" },
replay: {
label: "Take her slow tonight",
actType: "vaginal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 65, love: 50 },
cost: { energy: 22, time: 2 },
statsApplied: { auntCarol: { lust: 12, love: 5 }, player: { lust: 35 } },
cooldownHours: 22,
videos: [
"img/chars/carol/scene_third_vaginal/alexapearl_1_riding.webm",
"img/chars/carol/scene_third_vaginal/alexapearl_2_riding_cum_in_ass.webm"
],
passage: "ReplayCarolRomanticNight",
cooldownLine: "\"Mmh. Slow nights stay slow nights, sweetie. Don't make me ration them. Tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS021": {
name: "Riding to Ecstasy", // Sexo Vaginal #4 (Riding + Creampie)
status: 0,
location: "BedroomCarol",
passage: "CarolRidingCreampie",
period: "night",
day: ["Tuesday"],
character: "auntCarol",
stats: { lust: 65, love: 15, corruption: 25 },
requirements: { type: "mission", id: "CarolMakeCocktail" },
replay: {
label: "Let her ride you to ruin",
actType: "vaginal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["evening", "night"],
requirements: { lust: 75, love: 45 },
cost: { energy: 28, time: 2 },
statsApplied: { auntCarol: { lust: 15, corruption: 10 }, player: { lust: 40 } },
cooldownHours: 24,
videos: [
"img/chars/carol/scene_four_vaginal/alexapearl_1_teasing_his.webm",
"img/chars/carol/scene_four_vaginal/alexapearl_3_riding.webm",
"img/chars/carol/scene_four_vaginal/alexapearl_4_riding_creampie.webm"
],
passage: "ReplayCarolRidingCreampie",
cooldownLine: "\"You finished inside me twice today. I'm walking funny enough already. Tomorrow.\" She grins and rolls over.",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
/*
----------------------------------------------------
FASE 4: O TABU FINAL (Semana 3-4)
----------------------------------------------------
*/
/* TIFFANY SCENES — flagged here so replay system can find them */
"TS001": {
name: "Locker Room Fun",
status: 0,
location: "FemaleLockerRoom",
passage: "TiffanyLockerRoom",
period: ["afternoon"],
day: ["Tuesday", "Thursday", "Saturday"],
character: "randomEncounters.gymGirl",
stats: { tiffany_lust: 20 },
requirements: { type: "mission", id: "TiffanySpotMe" },
replay: {
label: "Find her in the locker room again",
actType: "tease",
character: "randomEncounters.gymGirl",
locations: ["FemaleLockerRoom", "ShowerFemaleLockerRoom", "Gym"],
periods: ["afternoon"],
requirements: { lust: 12, love: 0 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 14 } },
cooldownHours: 10,
videos: [
"img/chars/random/random_encounters/gymgirl_spot_lockerroom/tiffany_1_enter_locker_room.webm",
"img/chars/random/random_encounters/gymgirl_spot_lockerroom/player_spotting.jpeg",
"img/chars/random/random_encounters/gymgirl_spot_lockerroom/player_spotting_2.jpeg"
],
passage: "ReplayTiffanyLockerRoom",
cooldownLine: "She zips up her gym bag and rolls her eyes. \"Bro. Once a day. Catch me at the bag tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"PS001": {
name: "Fitting Room",
status: 0,
location: "MallClothing",
passage: "PaigeFittingRoom",
period: ["afternoon", "evening"],
day: ["Monday", "Wednesday", "Friday", "Saturday"],
character: "randomEncounters.fittingRoomGirl",
stats: {},
requirements: { type: "mission", id: "PaigeFittingHelp" },
replay: {
label: "Catch her in the fitting rooms again",
actType: "vaginal",
character: "randomEncounters.fittingRoomGirl",
locations: ["MallClothing"],
periods: ["afternoon", "evening"],
requirements: { lust: 8, love: 0 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 12,
videos: [
"img/chars/paige/sumiko_fitting_pink_set.png",
"img/chars/paige/sumiko_first_fitting_room_1.mp4"
],
passage: "ReplayPaigeFittingRoom",
cooldownLine: "She shakes her head, already backing toward the racks. \"I have to get home. Don't make this a habit.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"LS001": {
name: "Private Reading Room",
status: 0,
location: "Library",
passage: "FionaLibraryStacks",
period: ["afternoon"],
day: ["Tuesday", "Thursday", "Saturday"],
character: "randomEncounters.libraryGirl",
stats: {},
requirements: { type: "mission", id: "FionaHighShelf" },
replay: {
label: "Find her in the quiet room again",
actType: "vaginal",
character: "randomEncounters.libraryGirl",
locations: ["Library"],
periods: ["afternoon"],
requirements: { lust: 8, love: 0 },
cost: { energy: 8, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 12,
videos: [
"img/chars/fiona/lexy_portrait.jpg",
"img/chars/fiona/lexy_first_library_1.mp4"
],
passage: "ReplayFionaLibrary",
cooldownLine: "She holds a finger to her lips. \"Not today. The desk is watching.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"HS001": {
name: "Off the Path",
status: 0,
location: "ParkTrail",
passage: "CarmenTrailHookup",
period: ["morning"],
day: ["Monday", "Wednesday", "Friday", "Sunday"],
character: "randomEncounters.parkGirl",
stats: {},
requirements: { type: "mission", id: "CarmenTrailRun" },
replay: {
label: "Run into her on the trail again",
actType: "vaginal",
character: "randomEncounters.parkGirl",
locations: ["ParkTrail", "RunningPark"],
periods: ["morning"],
requirements: { lust: 10, love: 0 },
cost: { energy: 10, time: 1 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 12,
videos: [
"img/chars/carmen/hailey_portrait.jpg",
"img/chars/carmen/hailey_first_hike_1.mp4"
],
passage: "ReplayCarmenTrail",
cooldownLine: "She keeps jogging, shaking her head. \"I already ran. Catch the trail tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"RX001": {
name: "Stage Dance",
status: 0,
location: "VelvetCurtain",
passage: "RoxyStageDance",
period: ["night"],
day: ["Monday", "Tuesday", "Thursday", "Friday", "Saturday"],
character: "roxy",
stats: {},
requirements: { type: "none" },
replay: {
label: "Watch her dance again",
actType: "tease",
character: "openWorldGirls.roxy",
locations: ["VelvetCurtain"],
periods: ["night"],
requirements: { lust: 10, love: 0 },
cost: { energy: 6, time: 1 },
statsApplied: { player: { lust: 6 } },
cooldownHours: 8,
videos: [
"img/chars/roxy/roxy_portrait.jpg",
"img/chars/roxy/roxy_first_champagne_1.mp4"
],
passage: "ReplayRoxyDance",
cooldownLine: "She doesn't even look up from the pole. \"You already got the free look tonight.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"RX003": {
name: "Private Room",
status: 0,
location: "VelvetCurtain",
passage: "RoxyPrivateRoom",
period: ["night"],
day: ["Monday", "Tuesday", "Thursday", "Friday", "Saturday"],
character: "roxy",
stats: {},
requirements: { type: "keyEvent", id: "roxyDanceDone" },
replay: {
label: "Buy the private room again",
actType: "blowjob",
character: "openWorldGirls.roxy",
locations: ["VelvetCurtain"],
periods: ["night"],
requirements: { lust: 10, love: 0 },
cost: { energy: 10, time: 1, money: 40 },
statsApplied: { player: { lust: 10 } },
cooldownHours: 8,
videos: [
"img/chars/roxy/roxy_portrait.jpg",
"img/chars/roxy/roxy_first_champagne_5.mp4"
],
passage: "ReplayRoxyPrivate",
cooldownLine: "She taps the booth. \"Private's closed. Wallet's still welcome tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"RX004": {
name: "Champagne Finish",
status: 0,
location: "VelvetCurtain",
passage: "RoxyChampagneSex",
period: ["night"],
day: ["Monday", "Tuesday", "Thursday", "Friday", "Saturday"],
character: "roxy",
stats: {},
requirements: { type: "keyEvent", id: "roxyPrivateDone" },
replay: {
label: "Buy the rest of the night again",
actType: "vaginal",
character: "openWorldGirls.roxy",
locations: ["VelvetCurtain"],
periods: ["night"],
requirements: { lust: 12, love: 0 },
cost: { energy: 12, time: 1, money: 60 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 10,
videos: [
"img/chars/roxy/roxy_portrait.jpg",
"img/chars/roxy/roxy_first_champagne_9.mp4"
],
passage: "ReplayRoxyChampagne",
cooldownLine: "She doesn't even look up from the pole. \"Meter's running, sweetheart. Not twice that fast.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"RX002": {
name: "Rain Specialty",
status: 0,
location: "VelvetCurtain",
passage: "RoxyRainRoom",
period: ["night"],
day: ["Monday", "Tuesday", "Thursday", "Friday", "Saturday"],
character: "roxy",
stats: {},
requirements: { type: "keyEvent", id: "roxyChampagneDone" },
replay: {
label: "Buy the rain set again",
actType: "vaginal",
character: "openWorldGirls.roxy",
locations: ["VelvetCurtain"],
periods: ["night"],
requirements: { lust: 12, love: 0 },
cost: { energy: 10, time: 1, money: 80 },
statsApplied: { player: { lust: 12 } },
cooldownHours: 10,
videos: [
"img/chars/roxy/roxy_first_rain_1.mp4",
"img/chars/roxy/roxy_portrait.jpg"
],
passage: "ReplayRoxyRain",
cooldownLine: "She wrings water from her hair. \"Specialty's done for tonight. Bring a bigger wallet tomorrow.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
},
"CS022": {
name: "The Final Taboo", // Sexo Anal
status: 0,
location: "BedroomCarol",
passage: "CarolFinalTabooAnal",
period: "night",
day: ["Wednesday"],
character: "auntCarol",
stats: { lust: 80, love: 20, corruption: 40 },
requirements: { type: "mission", id: "CarolTenseMassage" },
replay: {
label: "Take her the way she likes",
actType: "anal",
character: "auntCarol",
locations: ["BedroomCarol"],
periods: ["night"],
requirements: { lust: 85, love: 50 },
cost: { energy: 35, time: 2 },
statsApplied: { auntCarol: { lust: 18, corruption: 15 }, player: { lust: 45 } },
cooldownHours: 30,
videos: [
"img/chars/carol/scene_first_anal/alexapearl_1_blowjob.webm",
"img/chars/carol/scene_first_anal/alexapearl_2_riding.webm",
"img/chars/carol/scene_first_anal/alexapearl_3_anal.webm"
],
passage: "ReplayCarolFinalTabooAnal",
cooldownLine: "\"Mmm. That kind of evening doesn't repeat itself in twelve hours, sweetie. Give your aunt a day.\"",
lastPlayedAbsoluteHour: null,
timesReplayed: 0
}
}
}>>
<<set $location to "Aunt's House">>
/* ============================================================
v0.6 EXPANSION STATE (additive — see docs/EXPANSION-ROADMAP.md)
============================================================ */
/* P1 — Stats: xp pools (were awarded but never initialised) + reputation */
<<set $player.strength_xp to 0>>
<<set $player.intelligence_xp to 0>>
<<set $player.charisma_xp to 0>>
<<set $player.reputation to { street: 0, fighters: 0, gang: 0 }>>
<<set $player.equipped to []>> /* equipped item keys (combat modifiers) */
<<set $player.injury to 0>> /* temporary combat debuff, decays on sleep */
/* P2 — Debt ledger (drives Brandi's arc) */
<<set $debts to {}>>
/* Laptop adult video library (63 clips across 4 categories) */
<<set $pornCategory to "all">>
<<set $laptopPorn to [
"img/porn_videos/preliminar/Carol_Dick_Surprise.gif",
"img/porn_videos/preliminar/carol_finger_fuck.gif",
"img/porn_videos/preliminar/carol_force_finger_fuck.gif",
"img/porn_videos/preliminar/carol_kissing_stomach.gif",
"img/porn_videos/preliminar/carol_nipple_massage.gif",
"img/porn_videos/preliminar/carol_nipple_orgasm.gif",
"img/porn_videos/preliminar/carol_player_bite_clit.gif",
"img/porn_videos/preliminar/carol_player_cuddling.gif",
"img/porn_videos/preliminar/carol_player_cuddling_2.gif",
"img/porn_videos/preliminar/carol_player_grind.gif",
"img/porn_videos/preliminar/carol_player_inner_thighs_kiss.gif",
"img/porn_videos/preliminar/carol_player_lick_clit.gif",
"img/porn_videos/preliminar/carol_player_lick_clit_2.gif",
"img/porn_videos/preliminar/carol_player_lick_clit_3.gif",
"img/porn_videos/preliminar/carol_player_pussy_finger.gif",
"img/porn_videos/preliminar/carol_player_pussy_finger_2.gif",
"img/porn_videos/preliminar/carol_player_pussy_finger_3.gif",
"img/porn_videos/preliminar/carol_player_pussy_kiss.gif",
"img/porn_videos/preliminar/carol_player_sucking_nipple.gif",
"img/porn_videos/preliminar/carol_player_sucking_nipple_2.gif",
"img/porn_videos/preliminar/carol_player_sucking_nipple_3.gif",
"img/porn_videos/preliminar/carol_player_throes_orgasm.gif",
"img/porn_videos/preliminar/carol_player_touching.gif",
"img/porn_videos/preliminar/carol_pussy_stimulated.gif",
"img/porn_videos/preliminar/carol_spread_pussy.gif",
"img/porn_videos/preliminar/Carol_Teasing_Each_Outher.gif",
"img/porn_videos/blowjob/carol_blowjob.gif",
"img/porn_videos/blowjob/carol_blowjob_2.gif",
"img/porn_videos/blowjob/carol_blowjob_3.gif",
"img/porn_videos/blowjob/carol_blowjob_4.gif",
"img/porn_videos/blowjob/carol_blowjob_5.gif",
"img/porn_videos/blowjob/carol_blowjob_6.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_2.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_3.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_4.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_6.gif",
"img/porn_videos/blowjob/carol_blowjob_cum_throat_7.gif",
"img/porn_videos/blowjob/carol_gentle_blowjob.gif",
"img/porn_videos/titjob/carol_titjob_3.gif",
"img/porn_videos/titjob/carol_titjob_4.gif",
"img/porn_videos/titjob/carol_titjob_6.gif",
"img/porn_videos/titjob/carol_titjob_7.gif",
"img/porn_videos/titjob/carol_titjob_cum.gif",
"img/porn_videos/titjob/carol_titjob_cum_2.gif",
"img/porn_videos/titjob/carol_titjob_cum_3.gif",
"img/porn_videos/titjob/carol_titjob_cum_4.gif",
"img/porn_videos/titjob/carol_titjob_cum_5.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_2.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_3.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_4.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_5.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_6.gif",
"img/porn_videos/fuck_pussy/Carol_Orgasm_7.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_2.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_3.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_4.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_5.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_6.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_While_Look.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_While_Look_2.gif",
"img/porn_videos/fuck_pussy/Carol_Pussy_Fuck_While_Look_3.gif"
]>>
/* P9 — Branch flags */
<<set $story to { brandiDebtPath: null }>>
/* P3/P4 — Item catalog */
<<set $items to {
"ProteinPowder": { name: "Protein Powder", desc: "A tub of gym-rat fuel. Drink it, get stronger.", price: 40, category: "consumable", effect: { strength_xp: 12 }, emoji: "🥤" },
"EnergyDrink": { name: "Energy Drink", desc: "Cheap caffeine in a can. Restores energy.", price: 15, category: "consumable", effect: { energy: 30 }, emoji: "⚡" },
"SelfHelpBook": { name: "Self-Help Book", desc: "Dog-eared paperback. Surprisingly sharpens the mind.", price: 35, category: "consumable", effect: { intelligence_xp: 12 }, emoji: "📘" },
"Cologne": { name: "Bottle of Cologne", desc: "Smells expensive. Boosts your confidence.", price: 50, category: "consumable", effect: { charisma_xp: 12 }, emoji: "🧴" },
"Roses": { name: "Bouquet of Roses", desc: "A dozen red roses. Always welcome.", price: 30, category: "gift", giftValue: 10, emoji: "🌹" },
"Chocolates": { name: "Box of Chocolates", desc: "A classic, thoughtful gift.", price: 20, category: "gift", giftValue: 6, emoji: "🍫" },
"BrassKnuckles": { name: "Brass Knuckles", desc: "Cold, heavy. Hits a lot harder in the ring.", price: 120, category: "equipment", effect: { power: 3 }, emoji: "🥊" },
"HandWraps": { name: "Hand Wraps", desc: "Protect your knuckles, swing with confidence.", price: 60, category: "equipment", effect: { power: 1, defense: 1 }, emoji: "🧤" },
"BurnerPhone": { name: "Burner Phone", desc: "An untraceable phone. Someone wants you to have this.", price: 80, category: "key", emoji: "📱" },
"NarratorOfLifeBook": { name: "Narrator of Life: Anthology", desc: "An anthology of interactive adult choice stories exploring taboo desires and tangled dilemmas. Sharpens the mind and imagination.", price: 30, category: "consumable", effect: { intelligence_xp: 15, lust: 5 }, link: "https://narrator-of-life-public-release.pages.dev/", linkText: "Play online at Narrator of Life ↗", emoji: "📖" },
"AthleticFit": { name: "Athletic Training Gear", desc: "Sleek, breathable workout outfit. Improves physique conditioning when training.", price: 50, category: "equipment", effect: { power: 1, defense: 1 }, emoji: "👕" },
"CasualDapper": { name: "Sharp Casual Outfit", desc: "Fitted button-down and tailored trousers. Boosts your confidence and personal charm.", price: 85, category: "equipment", effect: { charisma_xp: 20 }, emoji: "👔" },
"SilkRobeGift": { name: "Luxury Silk Robe", desc: "A lavish, shimmering silk robe. A decadent gift guaranteed to impress.", price: 110, category: "gift", giftValue: 25, emoji: "👘" }
}>>
/* shopId -> array of item keys it stocks */
<<set $shopStock to {
"LocalStore": ["EnergyDrink", "Chocolates"],
"MallSupplements": ["ProteinPowder", "EnergyDrink"],
"MallBookstore": ["SelfHelpBook", "NarratorOfLifeBook"],
"MallGiftShop": ["Roses", "Chocolates", "Cologne", "SilkRobeGift"],
"MallElectronics": ["BurnerPhone"],
"MallClothing": ["AthleticFit", "CasualDapper", "SilkRobeGift"],
"BlackMarket": ["BrassKnuckles", "HandWraps", "BurnerPhone"]
}>>
/* P7 — Fight Club opponents (data rows; tiers gate on fighters reputation) */
<<set $fighters to {
"Tank": { name: "Tank", tier: 1, power: 12, stamina: 60, reward: { money: 60, fighters: 5 }, requires: { type: "none" }, beaten: false,
taunt: "A slab of a man cracks his knuckles. \"Fresh meat.\"" },
"Switch": { name: "Switchblade Sue", tier: 2, power: 20, stamina: 80, reward: { money: 140, fighters: 8 }, requires: { type: "reputation", faction: "fighters", value: 15 }, beaten: false,
taunt: "She grins, all teeth. \"Try to keep your pretty face.\"" },
"Bruiser": { name: "The Bruiser", tier: 3, power: 30, stamina: 110, reward: { money: 300, fighters: 12, gang: 5 }, requires: { type: "reputation", faction: "fighters", value: 35 }, beaten: false,
taunt: "The crowd hushes. He doesn't even look at you. \"Make it quick.\"" }
}>>
/* P5 — Apartments: buildings -> numbered units. resident uses dotted-path convention. */
<<set $apartments to {
"standard": {
name: "Maple Court Apartments",
location: "ApartmentsStandard",
image: "img/layout/city/apartments_standard.jpg",
units: {
"3B": { resident: "storeSkylar", unlockKeyEvent: "skylarAddressKnown", passage: "ApartmentSkylar", homeSchedule: { start: 18, end: 9 } },
"5A": { resident: null }
}
},
"luxury": {
name: "The Highrise",
location: "ApartmentsLuxury",
image: "img/layout/city/apartments_luxury.jpg",
units: {
"PH": { resident: "openWorldGirls.roxy", unlockKeyEvent: "roxyAddressKnown", passage: "ApartmentRoxy", homeSchedule: { start: 4, end: 12 } }
}
}
}>>
/* P5/P8 — new keyEvents (additive to existing $keyEvents) */
<<set $keyEvents.skylarAddressKnown to false>>
/* SKYLAR PHASE 2 keyEvents */
<<set $keyEvents.skylarHomeWelcome to false>>
<<set $keyEvents.skylarAmenities to false>>
<<set $keyEvents.skylarFirstSex to false>>
<<set $keyEvents.skylarAnal to false>>
/* ANGELA PHASE 2 keyEvents */
<<set $keyEvents.angelaFirstSex to false>>
<<set $keyEvents.angelaOvernight to false>>
<<set $keyEvents.angelaDommePath to false>>
<<set $keyEvents.angelaDevotedPath to false>>
<<set $keyEvents.angelaDommeAwakened to false>>
<<set $keyEvents.angelaSpareKey to false>>
<<set $keyEvents.roxyAddressKnown to false>>
<<set $keyEvents.outskirtsUnlocked to false>>
<<set $keyEvents.fightClubIntroduced to false>>
<<set $keyEvents.metMia to false>>
<<set $keyEvents.metLacey to false>>
<<set $keyEvents.roxyDanceDone to false>>
<<set $keyEvents.roxyPrivateDone to false>>
<<set $keyEvents.roxyChampagneDone to false>>
<<set $keyEvents.roxyRainDone to false>>
/* Valerie Phase 2 — first PIV / creampie complete (Kenzie secrecy hook) */
<<set $keyEvents.valerieSacredUnion to false>>
/* JENNA PHASE 2 keyEvents */
<<set $keyEvents.jennaFirstSex to false>>
<<set $keyEvents.jennaHusbandCallDone to false>>
<<set $keyEvents.jennaEmotionalDebt to false>>
<<set $keyEvents.mondayBriefingSeen to false>>
<<set $keyEvents.groceriesPaidDay to 0>>
/* P7 — Fight arena handoff state */
<<set $pendingFight to "">>
<<set $pendingBet to 0>>
/* NPC face registry — drop-in paths: docs/MEDIA-CAPTURE.md §2.3
Overwrite img/chars/npcs/<name>.png; keep the filename. */
<<set $faces to {
rina: "img/chars/unknown_face.png",
castellano: "img/chars/npcs/castellano.png",
mia: "img/chars/unknown_face.png",
lacey: "img/chars/unknown_face.png",
dealer: "img/chars/npcs/dealer.png",
motelClerk: "img/chars/npcs/motel_clerk.png",
tank: "img/chars/npcs/tank.png",
bruiser: "img/chars/npcs/bruiser.png",
sue: "img/chars/unknown_face.png",
harper: "img/chars/harper/venessas_face.jpg",
elise: "img/chars/elise/mia_face.jpg",
sienna: "img/chars/sienna/ashley_face.jpg",
marcy: "img/chars/marcy/rihanna_face.jpg",
nikki: "img/chars/nikki/lexis_face.jpg",
paige: "img/chars/paige/sumiko_portrait.jpg",
fiona: "img/chars/fiona/lexy_portrait.jpg",
carmen: "img/chars/carmen/hailey_portrait.jpg",
roxy: "img/chars/roxy/roxy_portrait.jpg"
}>>
/* Generic laptop Leisure clips. Add paths after dropping files in img/laptop/porn/. */
<<set $laptopPorn to []>>
<<set $locationStaff to {
harper: {
name: "Harper",
face: "img/chars/harper/venessas_face.jpg",
dialogClass: "harper",
location: "CoffeeShop",
hours: { start: 8, end: 17 },
love: 0,
lust: 0,
lines: [
"What can I get you? I already know you're going to stare at the board.",
"Iced or hot. Don't make it a personality test.",
"Clouds on the ceiling are fake. The espresso isn't."
],
interactions: {
talk: { limit: 3, stats: { love: 1 }, passage: "HarperTalk" },
flirt: { limit: 2, stats: { lust: 2 }, passage: "HarperFlirt" }
},
dailyInteractions: { talk: 0, flirt: 0, gift: 0 }
},
elise: {
name: "Elise",
face: "img/chars/elise/mia_face.jpg",
dialogClass: "elise",
location: "Library",
hours: { start: 10, end: 17 },
love: 0,
lust: 0,
lines: [
"Keep it down. The quiet room is in the back if you need it.",
"Returns go on the cart. I'm not chasing overdue for fun.",
"If you're lost, the catalog is faster than asking me twice."
],
interactions: {
talk: { limit: 2, stats: { love: 1 }, passage: "EliseTalk" },
flirt: { limit: 1, stats: { lust: 2 }, passage: "EliseFlirt" }
},
dailyInteractions: { talk: 0, flirt: 0, gift: 0 }
},
sienna: {
name: "Sienna",
face: "img/chars/sienna/ashley_face.jpg",
dialogClass: "sienna",
location: "BarGildedLily",
hours: { start: 19, end: 23 },
love: 0,
lust: 0,
lines: [
"Tab's open. Name the pour.",
"I already know the regulars. You're new.",
"Last call isn't a metaphor. Drink or don't."
],
interactions: {
talk: { limit: 2, stats: { love: 1 }, passage: "SiennaTalk" },
flirt: { limit: 1, stats: { lust: 2 }, passage: "SiennaFlirt" }
},
dailyInteractions: { talk: 0, flirt: 0, gift: 0 }
},
marcy: {
name: "Marcy",
face: "img/chars/marcy/rihanna_face.jpg",
dialogClass: "marcy",
location: "BarRustyMug",
hours: { start: 18, end: 23 },
love: 0,
lust: 0,
lines: [
"...",
"What.",
"Drink's on the rail. Don't chat."
],
interactions: {},
dailyInteractions: { gift: 0 }
},
nikki: {
name: "Nikki",
face: "img/chars/nikki/lexis_face.jpg",
dialogClass: "nikki",
location: "Gym",
hours: { start: 8, end: 18 },
love: 0,
lust: 0,
lines: [
"Sign in. Towels are on the shelf.",
"Yoga studio's through the back if you're here for class, not ego.",
"I see you looking. Eyes on your own form."
],
interactions: {
talk: { limit: 3, stats: { love: 1 }, passage: "NikkiTalk" },
flirt: { limit: 2, stats: { lust: 2 }, passage: "NikkiFlirt" }
},
dailyInteractions: { talk: 0, flirt: 0, gift: 0 }
}
}>>/* ============================================================
<<populateLocation "PassageName">>
------------------------------------------------------------
High-performance presence + events engine for any location.
Computes $peoplePresent and _availableEventsArray in < 1ms via
window.computeLocationPresence(locationName) and renders the
"Who's Here?" avatar list + Special Events.
============================================================ */
<<widget "populateLocation">>
<<set _availableEventsArray to []>>
<<run window.computeLocationPresence($args[0])>>
<<if $peoplePresent && Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<<set _charName to (_charInfo && _charInfo.data && _charInfo.data.name) || ({ auntCarol: "Aunt Carol", neighborAngela: "Angela", storeSkylar: "Skylar" }[_charKey]) || _charKey>>
<<set _charFace to (_charInfo && _charInfo.data && _charInfo.data.face) || "">>
<div class="character-avatar" @data-char-key="_charKey">
<<if _charFace>><img @src="_charFace" @alt="_charName"><</if>>
<div class="character-name-plate"><<print _charName>></div>
</div>
<</for>>
</div>
</div>
<</if>>
<<if ($availableEventsArray && $availableEventsArray.length > 0) || (_availableEventsArray && _availableEventsArray.length > 0)>>
<<set _eventsList to ($availableEventsArray && $availableEventsArray.length > 0) ? $availableEventsArray : _availableEventsArray>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _eventsList>>
<<link _eventData.name _eventData.passage class="event-link">><</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;"><div id="panel-content"></div></div>
<</widget>>
<<widget "addLocationExtras">>
<<run window.addLocationExtras($locationName)>>
<</widget>><div id="notebook-screen">
<div class="character-screen-header">
<h1>Carol's Old Laptop</h1>
<<link "✕ Close">>
<<goto `previous() || "Bedroom"`>>
<</link>>
</div>
<div class="wallet-bar">
<span>💰 $<<= $player.money>></span>
<span>⚡ <<= $player.energy>>%</span>
<span>🥊 Fighter Rep: <<= $player.reputation.fighters>></span>
</div>
<div class="tab-buttons">
<button class="tab-button active" data-tab="nb-objectives" onclick="window.notebook.switchTab(this, 'nb-objectives')">Objectives</button>
<button class="tab-button" data-tab="nb-money" onclick="window.notebook.switchTab(this, 'nb-money')">Money</button>
<button class="tab-button" data-tab="nb-stats" onclick="window.notebook.switchTab(this, 'nb-stats')">Stats</button>
<button class="tab-button" data-tab="nb-leads" onclick="window.notebook.switchTab(this, 'nb-leads')">Leads</button>
<button class="tab-button" data-tab="nb-leisure" onclick="window.notebook.switchTab(this, 'nb-leisure')">Leisure</button>
<button class="tab-button" data-tab="nb-memories" onclick="window.notebook.switchTab(this, 'nb-memories')">Memories</button>
</div>
/* ---- OBJECTIVES ---- */
<div id="nb-objectives" class="tab-content active">
<h4>Active Objectives</h4>
<div id="nb-objectives-list" class="content-list-new"></div>
<<run window.notebook.renderObjectives('#nb-objectives-list')>>
</div>
/* ---- MONEY & DEBTS ---- */
<div id="nb-money" class="tab-content">
<h4>Wallet</h4>
<div class="stat-row"><span class="stat-label">💰 Cash: $<<= $player.money>></span></div>
<h4>Debts</h4>
<<set _hasDebt to false>>
<<for _who, _d range $debts>>
<<set _hasDebt to true>>
<div class="debt-row">
<span><<= _who.charAt(0).toUpperCase() + _who.slice(1)>> — owed to <<= _d.holder>></span>
<span>$<<= _d.paid>> / $<<= _d.owed>></span>
</div>
<</for>>
<<if not _hasDebt>><p class="no-content-sidebar">No outstanding debts. Yet.</p><</if>>
</div>
/* ---- STATS ---- */
<div id="nb-stats" class="tab-content">
<h4>Attributes</h4>
<div class="info-grid stat-info-grid">
<span><span class="stat-name">💪 Strength:</span> <strong class="stat-val"><<= $player.strength>></strong></span>
<span><span class="stat-name">🧠 Intelligence:</span> <strong class="stat-val"><<= $player.intelligence>></strong></span>
<span><span class="stat-name">🎭 Charisma:</span> <strong class="stat-val"><<= $player.charisma>></strong></span>
<span><span class="stat-name">❤️ Lust:</span> <strong class="stat-val"><<= $player.lust>></strong></span>
<span><span class="stat-name">😈 Corruption:</span> <strong class="stat-val"><<= $player.corruption>></strong></span>
<span><span class="stat-name">👑 Domination:</span> <strong class="stat-val"><<= $player.domination>></strong></span>
</div>
<h4>Combat</h4>
<div class="info-grid stat-info-grid">
<span><span class="stat-name">⚔️ Power:</span> <strong class="stat-val"><<= window.AWAC.power()>></strong></span>
<span><span class="stat-name">🛡️ Defense:</span> <strong class="stat-val"><<= window.AWAC.defense()>></strong></span>
<span><span class="stat-name">🫁 Max Stamina:</span> <strong class="stat-val"><<= window.AWAC.maxStamina()>></strong></span>
</div>
<h4>Reputation</h4>
<div class="info-grid stat-info-grid">
<span><span class="stat-name">🥊 Fighters:</span> <strong class="stat-val"><<= $player.reputation.fighters>></strong></span>
<span><span class="stat-name">🕶️ Gang:</span> <strong class="stat-val"><<= $player.reputation.gang>></strong></span>
<span><span class="stat-name">🏙️ Street:</span> <strong class="stat-val"><<= $player.reputation.street>></strong></span>
</div>
</div>
/* ---- LEADS ---- */
<div id="nb-leads" class="tab-content">
<h4>Rumors & Leads</h4>
<<if $keyEvents.outskirtsUnlocked>>
<div class="notebook-leads">They say there's money to be made in the Outskirts — for those willing to bleed for it. Ask around "The Pit."</div>
<</if>>
<<if $debts.brandi>>
<div class="notebook-leads">Brandi's in deep with the wrong people. She needs cash, fast. How you get it for her is up to you. <<link "Manage the debt" "BrandiDebtRepay">><</link>></div>
<</if>>
<<if $keyEvents.skylarAddressKnown>>
<div class="notebook-leads">Skylar gave you her address at Maple Court. You could visit her after hours.</div>
<</if>>
<<if not ($keyEvents.outskirtsUnlocked or $debts.brandi or $keyEvents.skylarAddressKnown)>>
<p class="no-content-sidebar">Keep your ears open around town. Leads will show up here.</p>
<</if>>
</div>
/* ---- LEISURE ---- */
<div id="nb-leisure" class="tab-content">
<h4>This machine still runs</h4>
<p class="spy-narrative">Carol's old laptop. Slow, noisy fan, enough for busywork.</p>
<<if $notebookFeedback>>
<div class="notebook-feedback" @class="'notebook-feedback ' + $notebookFeedback.type">
<<= $notebookFeedback.text>>
<<if $notebookFeedback.promoUrl>>
<div class="feedback-promo-action">
<a @href="$notebookFeedback.promoUrl" target="_blank" rel="noopener noreferrer" class="external-promo-link"><<= $notebookFeedback.promoText>></a>
</div>
<</if>>
</div>
<<set $notebookFeedback to null>>
<</if>>
<div class="nb-leisure-options scene-options">
<<link "Work online ($8, 1h)">>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopWork.count >= $dailyActivities.laptopWork.limit>>
<<set $notebookFeedback to { type: "warning", text: "⚠️ You have reached your daily online work limit (" + $dailyActivities.laptopWork.limit + "/" + $dailyActivities.laptopWork.limit + ")." }>>
<<elseif $player.energy < 8>>
<<set $notebookFeedback to { type: "error", text: "❌ Not enough energy! You need at least 8% energy to complete online tasks." }>>
<<else>>
<<set $dailyActivities.laptopWork.count += 1>>
<<run window.AWAC.earn(8)>>
<<set $player.energy -= 8>>
<<set $time += 1>>
<<if $time >= 24>><<set $time -= 24>><</if>>
<<set $notebookFeedback to { type: "success", text: "💼 You worked online for an hour, finishing freelance gigs. Earned $8! (-8% Energy, +1 Hour)" }>>
<</if>>
<<goto "Notebook">>
<</link>>
<<link "Study (+1 Int, +1 Cha, 1h)">>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopStudy.count >= $dailyActivities.laptopStudy.limit>>
<<set $notebookFeedback to { type: "warning", text: "⚠️ Your brain needs a break! You have reached your daily study limit (" + $dailyActivities.laptopStudy.limit + "/" + $dailyActivities.laptopStudy.limit + ")." }>>
<<elseif $player.energy < 4>>
<<set $notebookFeedback to { type: "error", text: "❌ You are too exhausted to focus. You need at least 4% energy to study." }>>
<<else>>
<<set $dailyActivities.laptopStudy.count += 1>>
<<set $player.intelligence += 1>>
<<set $player.charisma += 1>>
<<set $player.energy -= 4>>
<<set $time += 1>>
<<if $time >= 24>><<set $time -= 24>><</if>>
<<set $notebookFeedback to { type: "success", text: "📚 You spent an hour studying articles and guides. (+1 Int, +1 Cha, -4% Energy, +1 Hour)" }>>
<</if>>
<<goto "Notebook">>
<</link>>
<<link "Watch adult videos">>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopPorn.count >= $dailyActivities.laptopPorn.limit>>
<<set $notebookFeedback to { type: "warning", text: "⚠️ You've already spent enough time watching adult videos today (" + $dailyActivities.laptopPorn.limit + "/" + $dailyActivities.laptopPorn.limit + "). Give yourself a break!" }>>
<<goto "Notebook">>
<<else>>
<<set $pornSessionActive to true>>
<<goto "LaptopPorn">>
<</if>>
<</link>>
<<link "Browse taboo captions (ckcaptions.com)">>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopCaptions.count >= $dailyActivities.laptopCaptions.limit>>
<<set $notebookFeedback to { type: "warning", text: "⚠️ You've spent enough time browsing captions today (" + $dailyActivities.laptopCaptions.limit + "/" + $dailyActivities.laptopCaptions.limit + ")." }>>
<<else>>
<<set $dailyActivities.laptopCaptions.count += 1>>
<<set $player.lust += 5>>
<<set $time += 1>>
<<if $time >= 24>><<set $time -= 24>><</if>>
<<set $notebookFeedback to { type: "success", text: "💋 You browsed Carol's bookmarks to ckcaptions.com. Reading the photo-captions and taboo confessions definitely got your pulse racing! (+5 Lust, +1 Hour)", promoUrl: "https://ckcaptions.com", promoText: "Browse ckcaptions.com ↗" }>>
<</if>>
<<goto "Notebook">>
<</link>>
<<link "Play interactive fiction (Narrator of Life)">>
<<set $notebookActiveTab to "nb-leisure">>
<<if $dailyActivities.laptopGame.count >= $dailyActivities.laptopGame.limit>>
<<set $notebookFeedback to { type: "warning", text: "⚠️ You have played enough games for today (" + $dailyActivities.laptopGame.limit + "/" + $dailyActivities.laptopGame.limit + ")." }>>
<<else>>
<<set $dailyActivities.laptopGame.count += 1>>
<<set $player.intelligence += 1>>
<<set $player.lust += 3>>
<<set $time += 1>>
<<if $time >= 24>><<set $time -= 24>><</if>>
<<set $notebookFeedback to { type: "info", text: "🎮 You loaded Narrator of Life in the browser. Guiding characters through taboo choices and branching sexual encounters was thoroughly gripping! (+1 Int, +3 Lust, +1 Hour)", promoUrl: "https://narrator-of-life-public-release.pages.dev/", promoText: "Play Narrator of Life ↗" }>>
<</if>>
<<goto "Notebook">>
<</link>>
</div>
<p class="no-content-sidebar">Work <<= $dailyActivities.laptopWork.count>>/<<= $dailyActivities.laptopWork.limit>> · Study <<= $dailyActivities.laptopStudy.count>>/<<= $dailyActivities.laptopStudy.limit>> · Videos <<= $dailyActivities.laptopPorn.count>>/<<= $dailyActivities.laptopPorn.limit>> · Captions <<= $dailyActivities.laptopCaptions.count>>/<<= $dailyActivities.laptopCaptions.limit>> · Stories <<= $dailyActivities.laptopGame.count>>/<<= $dailyActivities.laptopGame.limit>></p>
<p class="spy-narrative"><<if not $laptopPorn or $laptopPorn.length is 0>>Folder is empty.<<else>>Folder contains <<= $laptopPorn.length>> clips across 4 categories.<</if>></p>
</div>
/* ---- MEMORIES / REPLAY GALLERY ---- */
<div id="nb-memories" class="tab-content">
<h4>Unlocked Erotic Memories</h4>
<p class="spy-narrative">Private recordings and milestone encounters you can relive anytime.</p>
<div id="nb-memories-list" class="content-list-new"></div>
<<run window.notebook.renderMemories('#nb-memories-list')>>
</div>
</div><<silently>>
<<set $pornCategory to ($pornCategory || "all")>>
<<if $pornSessionActive and $dailyActivities.laptopPorn.count < $dailyActivities.laptopPorn.limit>>
<<set $dailyActivities.laptopPorn.count += 1>>
<<set $player.lust to Math.max(0, $player.lust - 30)>>
<<set $time += 1>>
<<if $time >= 24>><<set $time -= 24>><</if>>
<<set $pornSessionActive to false>>
<<set $pornRelieved to true>>
<</if>>
<<set _clip to window.AWAC.pickLaptopPorn($pornCategory)>>
<</silently>>
<div id="notebook-screen">
<div class="character-screen-header">
<h1>A folder named "misc"</h1>
<<link "✕ Close" "Notebook">><</link>>
</div>
<div class="laptop-category-bar">
<<link "🎲 All (63)" "LaptopPorn">><<set $pornCategory to "all">><</link>>
<<link "💋 Foreplay (26)" "LaptopPorn">><<set $pornCategory to "preliminar">><</link>>
<<link "👄 Oral (12)" "LaptopPorn">><<set $pornCategory to "blowjob">><</link>>
<<link "🍈 Breasts (9)" "LaptopPorn">><<set $pornCategory to "titjob">><</link>>
<<link "🔥 Sex (16)" "LaptopPorn">><<set $pornCategory to "fuck_pussy">><</link>>
</div>
<<if _clip>>
<div class="laptop-porn-screen">
<<if _clip.toLowerCase().endsWith(".mp4") or _clip.toLowerCase().endsWith(".webm")>>
<video controls autoplay loop muted playsinline class="laptop-porn-media">
<source @src="_clip">
</video>
<<else>>
<img @src="_clip" alt="Adult Video" class="laptop-porn-media">
<</if>>
</div>
<<if $pornCategory is "preliminar">>
<p class="spy-narrative">The video plays a slow, sensual scene with gentle caresses and quiet sighs. Watching the intimacy build on screen helps unwind your mind, letting the restless tension slip away.</p>
<<elseif $pornCategory is "blowjob">>
<p class="spy-narrative">The screen showcases an intense oral scene, intimate and breathless. You lean back in the chair, completely absorbed in the steady rhythm until your head clears.</p>
<<elseif $pornCategory is "titjob">>
<p class="spy-narrative">A heated clip filled with heavy cleavage and close-up friction fills the display. The sheer visual indulgence takes the edge off your desire, leaving you relaxed and spent.</p>
<<elseif $pornCategory is "fuck_pussy">>
<p class="spy-narrative">An explicit, passionate sequence unfolds with deep rhythm and breathless moans. The intense stimulation culminates in a welcome release, wiping away your frustration.</p>
<<else>>
<p class="spy-narrative">The video plays with unfiltered intensity, filling the quiet room with soft groans from the laptop speakers. Watching the scene unfold satisfies your craving, leaving you relaxed and refreshed.</p>
<</if>>
<<if $pornRelieved>>
<div style="text-align: center; margin: var(--sp-2) 0;">
<span class="laptop-stat-pill">🕒 1 Hour Passed · ❤️ Lust Relieved (-30%)</span>
</div>
<<set $pornRelieved to false>>
<</if>>
<<else>>
<p class="spy-narrative">The folder is empty — a shortcut to nowhere. You sit here for a moment, restless, then close it.</p>
<</if>>
<div class="menu-buttons" style="margin-top: var(--sp-4);">
<<link "▶ Next Video" "LaptopPorn">><</link>>
<<link "Back to Desktop" "Notebook">><</link>>
<<link "Close Laptop" "Bedroom">><</link>>
</div>
</div><div class="game-container">
<!-- Texto Narrativo -->
<div class="spy-narrative">
The bus pulls up to the curb, and you step off, stretching your legs. Finally, out of the city for the weekend. She invited me after hearing I needed a break from school. I've always been close with her, and I'm looking forward to some time away from the city.
</div>
<!-- Diálogo do Jogador -->
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Yeah I was needing it... It was a long time that we didn't saw each other.
</div>
</div>
<!-- Ambiente -->
<br>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/house/house.jpg" alt="House">
</div>
<br>
<p class="environment-text">
Aunt Carol's house is a charming two-story home with a well-manicured lawn and flower beds bursting with color. I walk up the driveway, taking it all in. The place hasn't changed a bit.
</p>
</div>
<br>
<!-- Diálogo da Carol -->
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/carol/face/carol_face.webp" alt="Carol Face">
</div>
<br>
<div class="dialog-text carol">
The front door swings open before I even reach it. There she is — Aunt Carol, beaming. "You're here! I'm so glad you could make it. Come on in, honey — I've got everything ready for you."
</div>
</div>
<!-- Botões de Ação -->
<div class="menu-buttons">
[[Continue->Greeting]]
<<link "⏭️ Skip Prologue (Jump to City Life)">>
<<run window.AWAC.skipPrologue()>>
<<goto "CarolExplainsCityLife">>
<</link>>
</div>
</div>/* ============================================================
<<approachCharacter charKey>>
------------------------------------------------------------
Shared dispatcher for the replay system. Walks $scenes, filters
by the calling character's available replays at the current
location / period / mood / cooldown, then renders one of:
1) Replay menu (if any candidates qualify)
2) Cooldown refusal (uses the scene's cooldownLine)
3) Wrong-moment refusal (random refusalLines.wrongMoment)
4) Daily-cap refusal (random refusalLines.capHit)
Each character has a thin per-character dispatcher passage
(e.g. ApproachAuntCarol) that just calls this widget.
See docs/AGENT-STANDARDS.md §Replay System for the full spec.
============================================================ */
<<widget "approachCharacter">>
<<silently>>
<<set _charKey to $args[0]>>
<<set _parts to _charKey.split(".")>>
<<if _parts.length is 2>>
<<set _char to State.variables[_parts[0]][_parts[1]]>>
<<else>>
<<set _char to State.variables[_charKey]>>
<</if>>
<<set _location to previous() or "Bedroom">>
<<set _absHour to ($dayNumber * 24) + $time>>
<<set _currentPeriod to "">>
<<if $time >= 6 and $time <= 10>><<set _currentPeriod to "morning">>
<<elseif $time >= 11 and $time <= 13>><<set _currentPeriod to "noon">>
<<elseif $time >= 14 and $time <= 17>><<set _currentPeriod to "afternoon">>
<<elseif $time >= 18 and $time <= 21>><<set _currentPeriod to "evening">>
<<else>><<set _currentPeriod to "night">>
<</if>>
<<set _capHit to (_char.dailyReplayCount or 0) >= (_char.maxDailyReplays or 3)>>
<<set _candidates to []>>
<<set _onCooldown to []>>
<<for _key, _scene range $scenes>>
<<if _scene.replay and _scene.replay.character is _charKey and _scene.status is 1>>
<<set _r to _scene.replay>>
<<set _locOk to _r.locations.includes(_location)>>
<<set _periodOk to _r.periods.includes(_currentPeriod)>>
<<set _moodOk to _char.lust >= (_r.requirements.lust or 0) and _char.love >= (_r.requirements.love or 0)>>
<<set _energyOk to $player.energy >= (_r.cost.energy or 0)>>
<<set _cdOk to (_r.lastPlayedAbsoluteHour is null) or ((_absHour - _r.lastPlayedAbsoluteHour) >= (_r.cooldownHours or 0))>>
<<if _locOk and _periodOk and _moodOk and _energyOk>>
<<if _cdOk>>
<<run _candidates.push({key: _key, scene: _scene})>>
<<else>>
<<run _onCooldown.push({key: _key, scene: _scene})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</silently>>
<div class="game-container replay-dispatcher">
<<if _capHit>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="_char.face" alt="Character Face">
</div>
<div @class="'dialog-text ' + _char.dialogClass">
<<print _char.refusalLines.capHit.random()>>
</div>
</div>
<<elseif _candidates.length is 0 and _onCooldown.length > 0>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="_char.face" alt="Character Face">
</div>
<div @class="'dialog-text ' + _char.dialogClass">
<<= _onCooldown[0].scene.replay.cooldownLine or _char.refusalLines.wrongMoment.random()>>
</div>
</div>
<<elseif _candidates.length is 0>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="_char.face" alt="Character Face">
</div>
<div @class="'dialog-text ' + _char.dialogClass">
<<print _char.refusalLines.wrongMoment.random()>>
</div>
</div>
<<else>>
<div class="replay-menu">
<h3>Find a moment with her</h3>
<p class="replay-menu-hint">She catches your look. Pick your moment.</p>
<div class="replay-options">
<<for _i, _c range _candidates>>
<<capture _c>>
<div class="replay-option">
<<link _c.scene.replay.label `_c.scene.replay.passage`>><</link>>
<span class="replay-option-meta">
<span class="replay-tag replay-tag-`_c.scene.replay.actType`"><<= _c.scene.replay.actType>></span>
<span class="replay-cost">⚡ <<= _c.scene.replay.cost.energy>></span>
</span>
</div>
<</capture>>
<</for>>
</div>
</div>
<</if>>
<div class="menu-buttons">
<<link "Step away" `_location`>><</link>>
</div>
</div>
<</widget>>
/* ============================================================
<<applyReplay sceneKey>>
------------------------------------------------------------
Bookkeeping helper used inside each replay passage. Given the
scene key, applies all the state changes:
- bumps the character's dailyReplayCount
- marks lastPlayedAbsoluteHour and increments timesReplayed
- applies statsApplied (per-character + player)
- subtracts energy cost and advances time
Each replay passage just calls <<applyReplay "TheSceneKey">>
in its <<silently>> block; no per-character logic needed.
============================================================ */
<<widget "applyReplay">>
<<silently>>
<<set _key to $args[0]>>
<<set _r to $scenes[_key].replay>>
<<set _charKey to _r.character>>
<<set _parts to _charKey.split(".")>>
<<if _parts.length is 2>>
<<set _char to State.variables[_parts[0]][_parts[1]]>>
<<else>>
<<set _char to State.variables[_charKey]>>
<</if>>
<<run _char.dailyReplayCount = (_char.dailyReplayCount || 0) + 1>>
<<set $scenes[_key].replay.lastPlayedAbsoluteHour to ($dayNumber * 24) + $time>>
<<set $scenes[_key].replay.timesReplayed to ($scenes[_key].replay.timesReplayed || 0) + 1>>
/* Apply stats — supports player + top-level character keys.
For nested-path characters, scope statsApplied to { player: {...} } only;
relationship deltas were already applied in the original scene. */
<<for _statKey, _statVals range _r.statsApplied>>
<<for _statName, _statValue range _statVals>>
<<if _statKey is "player">>
<<run $player[_statName] = ($player[_statName] || 0) + _statValue>>
<<else>>
<<run State.variables[_statKey][_statName] = (State.variables[_statKey][_statName] || 0) + _statValue>>
<</if>>
<</for>>
<</for>>
/* Energy + time cost */
<<set $player.energy -= (_r.cost.energy || 0)>>
<<if $player.energy < 0>><<set $player.energy to 0>><</if>>
<<set $time += (_r.cost.time || 0)>>
<<if $time >= 24>><<set $time to $time - 24>><</if>>
<</silently>>
<</widget>>/* Generic shop. Set $shopContext = { id:"ShopId", name:"...", ret:"ReturnPassage", img:"..." } then goto "Shop". */
<<set _ctx to $shopContext>>
<<set _stock to $shopStock[_ctx.id] || []>>
<div class="game-container world-hub-container">
<h2 class="hub-title"><<= _ctx.name>></h2>
<div class="wallet-bar"><span>💰 $<<= $player.money>></span></div>
<div class="shop-grid">
<<for _i, _key range _stock>>
<<capture _key>>
<<set _item to $items[_key]>>
<div class="shop-item">
<div class="shop-item-icon"><<= _item.emoji || "📦">></div>
<div class="shop-item-name"><<= _item.name>></div>
<div class="shop-item-desc"><<= _item.desc>></div>
<div class="shop-item-tag"><<= _item.category>></div>
<<if _item.link>>
<div class="shop-item-promo">
<a @href="_item.link" target="_blank" rel="noopener noreferrer" class="external-promo-link"><<= _item.linkText || "Play online ↗">></a>
</div>
<</if>>
<div class="shop-item-price">$<<= _item.price>></div>
<<if $player.money >= _item.price>>
<<link `"Buy ($" + _item.price + ")"`>>
<<run window.AWAC.buyItem(_key)>>
<<goto "Shop">>
<</link>>
<<else>>
<span class="action-button disabled" title="Not enough money">Can't afford</span>
<</if>>
</div>
<</capture>>
<</for>>
<<if _stock.length is 0>>
<p class="spy-narrative">The shelves are bare today. Come back later.</p>
<</if>>
</div>
<div class="menu-buttons">
<<link "Open Inventory" "Inventory">><</link>>
<<link "Leave" `_ctx.ret`>><</link>>
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">Your Things</h2>
<div class="wallet-bar"><span>💰 $<<= $player.money>></span><span>⚔️ Power: <<= window.AWAC.power()>></span></div>
<div class="shop-grid">
<<if $player.inventory.length is 0>>
<p class="spy-narrative">Your pockets are empty.</p>
<</if>>
<<for _i, _key range $player.inventory>>
<<capture _key>>
<<if $items[_key]>>
<<set _item to $items[_key]>>
<div class="shop-item">
<div class="shop-item-icon"><<= _item.emoji || "📦">></div>
<div class="shop-item-name"><<= _item.name>></div>
<div class="shop-item-desc"><<= _item.desc>></div>
<div class="shop-item-tag"><<= _item.category>></div>
<<if _item.link>>
<div class="shop-item-promo">
<a @href="_item.link" target="_blank" rel="noopener noreferrer" class="external-promo-link"><<= _item.linkText || "Play online ↗">></a>
</div>
<</if>>
<<if _item.category is "equipment">>
<<link `($player.equipped.includes(_key) ? "Unequip" : "Equip")`>>
<<run window.AWAC.toggleEquip(_key)>>
<<goto "Inventory">>
<</link>>
<<elseif _item.category is "consumable">>
<<link "Use">>
<<run window.AWAC.useConsumable(_key)>>
<<goto "Inventory">>
<</link>>
<<elseif _item.category is "gift">>
<<link "Give">>
<<set $giftItem to _key>>
<<set $giftTarget to "">>
<<goto "GiveGift">>
<</link>>
<<else>>
<span class="shop-item-tag">key item</span>
<</if>>
</div>
<</if>>
<</capture>>
<</for>>
</div>
<div class="menu-buttons">
<<link "Back">>
<<goto `previous() || "Bedroom"`>>
<</link>>
</div>
</div>/* $giftItem = catalog key. Optional $giftTarget = peoplePresent key.
From a Who's Here panel the target is already set. From Inventory, pick someone here. */
<div class="game-container">
<<if not $giftItem or not $items[$giftItem]>>
<p class="spy-narrative">Your hands are empty.</p>
<div class="menu-buttons">
<<link "Back">>
<<goto `$locationName || previous() || "Inventory"`>>
<</link>>
</div>
<<elseif $giftTarget>>
<<set _ch to window.AWAC.resolveCharacter($giftTarget)>>
<<set _giftName to ($items[$giftItem] ? $items[$giftItem].name : "gift")>>
<<set _ok to window.AWAC.giveGift($giftItem, $giftTarget)>>
<<if _ok>>
<<set _dlg to "system">>
<<if _ch and _ch.dialogClass>><<set _dlg to _ch.dialogClass>><</if>>
<div class="dialog-container">
<<if _ch and _ch.face>>
<div class="dialog-image"><img @src="_ch.face" @alt="_ch.name"></div>
<</if>>
<div class="dialog-text <<= _dlg>>">
<<if _ch and _ch.name is "Marcy">>
...Thanks.
<<elseif _ch and _ch.name is "Roxy">>
Cute. Don't think this covers a dance.
<<else>>
You didn't have to — but I'm glad you did.
<</if>>
</div>
</div>
<p class="spy-narrative">You hand over the <<= _giftName>>. It lands.</p>
<<else>>
<p class="spy-narrative"><<if _ch and _ch.dailyInteractions and _ch.dailyInteractions.gift gte 1>>One present a day is plenty.<<else>>That doesn't go anywhere. Maybe they aren't here for gifts.<</if>></p>
<</if>>
<<set $giftItem to "">>
<<set $giftTarget to "">>
<div class="menu-buttons">
<<link "Back">>
<<goto `$locationName || "Inventory"`>>
<</link>>
</div>
<<else>>
<<set _targetItem to $items[$giftItem]>>
<p class="spy-narrative">Who gets the <<= (_targetItem ? _targetItem.name : "gift")>>?</p>
<div class="actions-container">
<<set _n to 0>>
<<if def $peoplePresent>>
<<for _k, _info range $peoplePresent>>
<<if _info.data and def _info.data.love>>
<<capture _k>>
<<set _n += 1>>
<<link `"Give to " + (_info.data.name || _k)`>>
<<set $giftTarget to _k>>
<<goto "GiveGift">>
<</link>>
<</capture>>
<</if>>
<</for>>
<</if>>
<<if _n is 0>>
<p class="spy-narrative">Nobody here to give this to. Find them first, then open the gift from their panel — or from inventory while you're standing with them.</p>
<</if>>
</div>
<div class="menu-buttons">
<<link "Keep it" "Inventory">><</link>>
</div>
<</if>>
</div><<set $gameVersion to "v0.5">>
<div class="start-screen-container">
<div class="start-title-wrap">
<h1 class="start-main-title">A Weekend with Aunt Carol</h1>
<div class="start-subtitle">A Narrative Adult Visual Novel</div>
<div class="start-version-tag"><<print $gameVersion>></div>
</div>
<div class="start-menu-grid">
[[New Game->Prologue]]
<<link "Dev Note">><<run window.showDeveloperNoteModal()>><</link>>
<<link "Saves">><<run UI.saves()>><</link>>
<<link "Settings">><<run UI.settings()>><</link>>
[[Credits]]
/% [[Review Passages (Dev)->DevPassageReview]] %/
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="tiffany-locker-room-content"></div>
</div><div class="game-container mission-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da missão aqui -->
<div id="tiffany-spot-me-content"></div>
</div><<approachCharacter "randomEncounters.gymGirl">><<silently>>
<<set _approach to [
"She's at her locker again, gym bag half-open, pulling her hair into a fresh ponytail. She sees you. \"Yo. Help a girl with her form?\"",
"You catch her after her workout, sweat-flushed, peeling out of her sports bra in the empty locker row. She doesn't even flinch. \"You again. Cool.\"",
"\"Hey hey,\" she says when you turn the corner. \"Spotter, right? Forgot a fresh shirt. You mind?\" She doesn't wait for the answer."
].random()>>
<<set _during to [
"She shamelessly changes in front of you. Towel wrap. Sports bra peeled off. The whole protocol. \"Eyes up, big guy. Or down. Whatever.\"",
"She catches you looking and grins. \"Bro. I'm an athlete. This isn't a *show*. Or — okay, sometimes it's a show.\"",
"She turns slightly, just enough to *be* the angle she's giving you. The locker room hum. The damp tile smell. The casual gym-girl entitlement."
].random()>>
<<set _outcome to [
"She finishes changing and slings her bag over her shoulder. \"Thanks for the spot. Catch me next time. I'm at the bag at four every Tuesday.\"",
"She straightens her shoulders, claps you on the arm. \"Good cardio sesh. Don't be a stranger, gym rat.\"",
"She bumps you with her hip on the way out. \"You're cute when you don't know where to look. See ya.\""
].random()>>
<<set _video to $scenes["TS001"].replay.videos.random()>>
<<applyReplay "TS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/city/gym/female_locker_room.jpg" alt="Female Locker Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Tiffany at her locker" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Head out to the gym floor->FemaleLockerRoom]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The main bathroom. It has a big, inviting tub and is filled with various bath bombs and scented oils. Definitely Valerie's touch.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bathroom.jpg" alt="Valerie's relaxing and aromatic bathroom">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BathroomValerie">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The bathroom is empty right now. Just the scent of oils.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Bathroom->ValerieHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Valerie's bedroom... It's just as eclectic as the living room. Dreamcatchers hang from the ceiling, and there's a faint, sweet smell of sandalwood in the air. This feels like her personal sanctuary.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's artistic and spiritual bedroom">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "BedroomValerie">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">Valerie's bedroom is empty right now. Just the scent of sandalwood.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Valerie's Bedroom->ValerieHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Valerie's garden feels less like a planned space and more like a beautiful, chaotic slice of nature. Wildflowers mix with herbs, and there's a constant, gentle hum of bees.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/garden.jpg" alt="Valerie's wild and beautiful garden">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "GardenValerie">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The garden is quiet and empty, just the sounds of nature.</p>
<</if>>
<<silently>>
<<set _availableEventsArray to []>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is $currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">> <<set _eventReqMet to State.hasPlayed(_event.requirements.id)>>
<<elseif _event.requirements.type is "scene">> <<set _eventReqMet to State.hasPlayed(_event.requirements.id)>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Garden->ValerieHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
The kitchen is surprisingly tidy compared to the living room. It smells like herbal tea and... clay?
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/kitchen.jpg" alt="Valerie's cozy and herbal kitchen">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "KitchenValerie">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The kitchen is empty right now. Just the scent of herbs.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Kitchen->ValerieHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Valerie's living room is a vibrant explosion of color. Canvases lean against walls, pottery sits on every surface, and the air smells like incense and turpentine. It's chaotic, but warm.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's colorful and artistic living room">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "LivingRoomValerie">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The living room is empty right now. Just the echo of creativity.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Living Room->ValerieHouse]]
</div>
</div><div class="game-container">
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Their pool area is surrounded by lush, overgrown plants. It feels secluded and private, like a hidden lagoon.
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/pool.jpg" alt="Valerie's secluded and natural pool">
</div>
</div>
<<silently>>
<<set $peoplePresent to {}>>
<<set $locationName to "PoolValerie">>
<<set _availableEventsArray to []>>
<<set _priorityCharacters to []>>
<<set _busyElsewhere to []>>
<<set _allCharacters to ["auntCarol", "neighborAngela", "storeSkylar"]>>
<<for _girlKey range Object.keys($openWorldGirls)>>
<<run _allCharacters.push(_girlKey)>>
<</for>>
<<set _currentPeriodName to "">>
<<if $time >= 6 and $time <= 10>> <<set _currentPeriodName to "morning">>
<<elseif $time >= 11 and $time <= 13>> <<set _currentPeriodName to "noon">>
<<elseif $time >= 14 and $time <= 17>> <<set _currentPeriodName to "afternoon">>
<<elseif $time >= 18 and $time <= 21>> <<set _currentPeriodName to "evening">>
<<else>> <<set _currentPeriodName to "night">>
<</if>>
<<for _charKey range _allCharacters>>
<<set _hasPriorityHere to false>>
<<set _isBusy to false>>
<<if def $missions>>
<<for _missionId, _missionData range $missions>>
<<if _missionData.character is _charKey and _missionData.status is 0>>
<<set _reqMet to false>>
<<set _req to _missionData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "event">>
<<if $events[_req.id] and $events[_req.id].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "item">>
<<if $player.inventory.includes(_req.item)>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "keyEvent">>
<<if $keyEvents[_req.id]>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "stats">>
<<set _reqMet to true>>
<<for _stat, _value range _req>>
<<if _stat isnot "type" and (!$player[_stat] or $player[_stat] < _value)>>
<<set _reqMet to false>>
<<break>>
<</if>>
<</for>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_missionData.day)>>
<<if _missionData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _missionData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_missionData.period)>>
<<if _missionData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _missionData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _missionData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if !_hasPriorityHere and !_isBusy and def $scenes>>
<<for _sceneId, _sceneData range $scenes>>
<<if _sceneData.character is _charKey and _sceneData.status is 0>>
<<set _reqMet to false>>
<<set _req to _sceneData.requirements>>
<<if _req.type is "none">> <<set _reqMet to true>>
<<elseif _req.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _req.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<<elseif _req.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _req.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _reqMet to true>> <</if>>
<</if>>
<<if _reqMet>>
<<set _dayMatch to false>>
<<set _periodMatch to false>>
<<if Array.isArray(_sceneData.day)>>
<<if _sceneData.day.includes($actualDay)>> <<set _dayMatch to true>> <</if>>
<<elseif _sceneData.day is $actualDay>>
<<set _dayMatch to true>>
<</if>>
<<if Array.isArray(_sceneData.period)>>
<<if _sceneData.period.includes(_currentPeriodName)>> <<set _periodMatch to true>> <</if>>
<<elseif _sceneData.period is _currentPeriodName>>
<<set _periodMatch to true>>
<</if>>
<<if _dayMatch and _periodMatch>>
<<if _sceneData.location is $locationName>>
<<set _hasPriorityHere to true>>
<<else>>
<<set _isBusy to true>>
<</if>>
<</if>>
<</if>>
<</if>>
<<if _hasPriorityHere or _isBusy>> <<break>> <</if>>
<</for>>
<</if>>
<<if _hasPriorityHere>>
<<run _priorityCharacters.push(_charKey)>>
<<elseif _isBusy>>
<<run _busyElsewhere.push(_charKey)>>
<</if>>
<</for>>
<<for _char range _priorityCharacters>>
<<if $openWorldGirls[_char]>> <<set $peoplePresent[_char] to { type: "main", data: $openWorldGirls[_char] }>>
<<elseif _char is "auntCarol">> <<set $peoplePresent[_char] to { type: "main", data: $auntCarol }>>
<<elseif _char is "neighborAngela">> <<set $peoplePresent[_char] to { type: "main", data: $neighborAngela }>>
<<elseif _char is "storeSkylar">> <<set $peoplePresent[_char] to { type: "main", data: $storeSkylar }>>
<</if>>
<</for>>
<<for _girlKey, _girlData range $openWorldGirls>>
<<if !$peoplePresent[_girlKey] and !_busyElsewhere.includes(_girlKey)>>
<<if _girlData.weeklySchedule[$actualDay] and _girlData.weeklySchedule[$actualDay][$locationName]>>
<<set _schedule to _girlData.weeklySchedule[$actualDay][$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent[_girlKey] to { type: "main", data: _girlData }>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if def $auntCarol and !$peoplePresent.auntCarol and !_busyElsewhere.includes("auntCarol")>>
<<if $auntCarol.locationSchedule and $auntCarol.locationSchedule[$locationName]>>
<<set _schedule to $auntCarol.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.auntCarol to { type: "main", data: $auntCarol }>>
<</if>>
<</if>>
<</if>>
<<if def $neighborAngela and !$peoplePresent.neighborAngela and !_busyElsewhere.includes("neighborAngela")>>
<<if $neighborAngela.locationSchedule and $neighborAngela.locationSchedule[$locationName]>>
<<set _schedule to $neighborAngela.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.neighborAngela to { type: "main", data: $neighborAngela }>>
<</if>>
<</if>>
<</if>>
<<if def $storeSkylar and !$peoplePresent.storeSkylar and !_busyElsewhere.includes("storeSkylar")>>
<<if $storeSkylar.locationSchedule and $storeSkylar.locationSchedule[$locationName]>>
<<set _schedule to $storeSkylar.locationSchedule[$locationName]>>
<<if ($time >= _schedule.start and $time <= _schedule.end) or ($time >= _schedule.start and _schedule.end < _schedule.start) or ($time <= _schedule.end and _schedule.end < _schedule.start)>>
<<set $peoplePresent.storeSkylar to { type: "main", data: $storeSkylar }>>
<</if>>
<</if>>
<</if>>
<<if def $events>>
<<for _eventId, _event range $events>>
<<if _event.location is $locationName and _event.status is 0 and (_event.day is $actualDay or (Array.isArray(_event.day) and _event.day.includes($actualDay)))>>
<<set _eventPeriodMatch to false>>
<<if typeof _event.period is "string">>
<<if _event.period is _currentPeriodName>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif Array.isArray(_event.period)>>
<<if _event.period.includes($currentPeriodName)>> <<set _eventPeriodMatch to true>> <</if>>
<<elseif typeof _event.period is 'undefined' or _event.period is null>>
<<set _eventPeriodMatch to true>>
<</if>>
<<if _eventPeriodMatch>>
<<set _eventReqMet to false>>
<<if _event.requirements.type is "none">> <<set _eventReqMet to true>>
<<elseif _event.requirements.type is "mission">>
<<set _requiredKey to Object.keys($missions).find(key => $missions[key].passage === _event.requirements.id)>>
<<if _requiredKey and $missions[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<<elseif _event.requirements.type is "scene">>
<<set _requiredKey to Object.keys($scenes).find(key => $scenes[key].passage === _event.requirements.id)>>
<<if _requiredKey and $scenes[_requiredKey].status === 1>> <<set _eventReqMet to true>> <</if>>
<</if>>
<<if _eventReqMet>>
<<run _availableEventsArray.push({name: _event.name, passage: _event.passage})>>
<</if>>
<</if>>
<</if>>
<</for>>
<</if>>
<</silently>>
<<if Object.keys($peoplePresent).length > 0>>
<div class="location-characters-container">
<h3>Who's Here?</h3>
<div class="character-avatar-list">
<<for _charKey, _charInfo range $peoplePresent>>
<div class="character-avatar" @data-char-key="_charKey">
<img @src="_charInfo.data.face" @alt="_charInfo.data.name">
<div class="character-name-plate"><<print _charInfo.data.name>></div>
</div>
<</for>>
</div>
</div>
<<else>>
<p class="mission-narrative-focus">The pool area is empty right now. Just the sound of nature.</p>
<</if>>
<<if _availableEventsArray.length > 0>>
<div class="event-list-container">
<h3>! Special Events !</h3>
<<for _i, _eventData range _availableEventsArray>>
<<link _eventData.name _eventData.passage class="event-link">>
<</link>>
<</for>>
</div>
<</if>>
<div id="interaction-panel" style="display: none;">
<div id="panel-content"></div>
</div>
<div class="menu-buttons">
[[Leave Pool Area->ValerieHouse]]
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 6) + 1>>
<<silently>>
<<set $openWorldGirls.valerie.dailyInteractions.flirt += 1>>
<<set $openWorldGirls.valerie.love += $openWorldGirls.valerie.interactions.flirt.stats.love>>
<<set $openWorldGirls.valerie.lust += $openWorldGirls.valerie.interactions.flirt.stats.lust>>
<<set $openWorldGirls.valerie.corruption += $openWorldGirls.valerie.interactions.flirt.stats.corruption>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
valerie: "You have such a strong, vibrant aura. It's very... compelling. I feel drawn to it.",
player: "I'm glad my... aura... is having a good effect."
},
{
valerie: "Sometimes, the universe brings two souls together for a reason. I wonder what our reason is...",
player: "I'm definitely interested in finding out."
},
{
valerie: "Physical touch is such an important way to exchange energy. A simple hug can realign everything...",
player: "Maybe we should... exchange some energy sometime."
},
{
valerie: "You have very kind eyes. But I can see a little bit of mischief hiding in there too. I like that.",
player: "It takes one to know one, I guess."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.valerie.face" alt="Valerie's Face">
</div>
<div class="dialog-text valerie">
<<= _randomDialogue.valerie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/valerie/flirt/valerie_flirt_" + _randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Her voice drops a little, becoming softer, more intimate. She holds your gaze a moment longer, a playful and knowing smile gracing her lips.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><<set _randomNumber to Math.floor(Math.random() * 3) + 1>>
<<silently>>
<<set $openWorldGirls.valerie.dailyInteractions.talk += 1>>
<<set $openWorldGirls.valerie.love += $openWorldGirls.valerie.interactions.talk.stats.love>>
<<set $openWorldGirls.valerie.lust += $openWorldGirls.valerie.interactions.talk.stats.lust>>
<</silently>>
<div class="game-container">
<<set _dialogueOptions to [
{
valerie: "I was just pondering the interconnectedness of all things. What's on your spirit's mind?",
player: "Mostly just what to have for lunch, to be honest."
},
{
valerie: "The energy in here feels a little different since you arrived. It's... brighter.",
player: "I'm glad I could bring some positive energy, then."
},
{
valerie: "Remember to take a deep breath. The universe is sending you exactly what you need in this moment.",
player: "Thanks, Valerie. I'll try to remember that."
},
{
valerie: "Hello there, fellow traveler. How is your journey today?",
player: "It's been an interesting trip so far."
}
]>>
<<set _randomDialogue to _dialogueOptions.random()>>
<div class="dialog-container">
<div class="dialog-image">
<img @src="$openWorldGirls.valerie.face" alt="Valerie's Face">
</div>
<div class="dialog-text valerie">
<<= _randomDialogue.valerie >>
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
<<= _randomDialogue.player >>
</div>
</div>
<div class="environment-container">
<div class="environment-image">
<video width="100%" height="auto" style="max-width: 580px; border-radius: 8px;" controls autoplay loop muted playsinline>
<<set _videoPath to "img/chars/valerie/talk/valerie_talk_" + _randomNumber + ".webm">>
<source @src="_videoPath" type="video/mp4">
Your browser doesn't support embedded videos.
</video>
</div>
<p class="spy-narrative">
Valerie speaks with a calm, warm smile, her presence radiating a gentle and inviting energy.
</p>
</div>
<br>
<div class="menu-buttons">
<<link "Leave Interaction">>
<<goto $locationName>>
<</link>>
</div>
</div><div class="game-container world-hub-container">
<h2 class="hub-title">Valerie's Home</h2>
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/valerie_house_preview.jpg" alt="Valerie's artistic and slightly wild-looking house">
</div>
</div>
<p class="hub-description">
You arrive at Valerie's house. It stands out from the others on the street, with a garden that feels more like a charmingly untamed meadow and wind chimes that sing softly in the breeze. There's an aura of calm, creative energy emanating from it.
</p>
<div class="hub-navigation-grid">
<div class="location-item">
<div class="location-overlay">
[[Living Room|LivingRoomValerie]]
</div>
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<div class="location-item">
<div class="location-overlay">
[[Kitchen|KitchenValerie]]
</div>
<img src="img/layout/valerie_house/kitchen.jpg" alt="Valerie's Kitchen">
</div>
<div class="location-item">
<div class="location-overlay">
[[Valerie's Bedroom|BedroomValerie]]
</div>
<img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's Bedroom">
</div>
<div class="location-item">
<div class="location-overlay">
[[Kenzie's Bedroom|BedroomKenzie]]
</div>
<img src="img/layout/valerie_house/bedroom_kenzie.jpg" alt="Kenzie's Bedroom">
</div>
<div class="location-item">
<div class="location-overlay">
[[Bathroom|BathroomValerie]]
</div>
<img src="img/layout/valerie_house/bathroom.jpg" alt="Valerie's Bathroom">
</div>
<div class="location-item">
<div class="location-overlay">
[[Pool Area|PoolValerie]]
</div>
<img src="img/layout/valerie_house/pool.jpg" alt="Valerie's Pool">
</div>
<div class="location-item">
<div class="location-overlay">
[[Garden|GardenValerie]]
</div>
<img src="img/layout/valerie_house/garden.jpg" alt="Valerie's Pool">
</div>
<div class="location-item">
<div class="location-overlay">
[[Leave to Neighborhood|Neighborhood]]
</div>
<img src="img/layout/neighborhood/neighborhood_image_day.jpg" alt="Leave to Neighborhood">
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Retrieve a Lost Crystal
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/valerie/dressed/valerie_at_pool.jpg" alt="Valerie by the Pool">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
By the pool’s edge, Valerie’s fingers worry at a beaded bracelet. Somewhere in the water—or nearby—the small quartz point she calls her anchor slipped away. The sunlight dances; the crystal does not. She meets your eyes with a hopeful, vulnerable smile.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face">
</div>
<div class="dialog-text brandi">
It hums when you’re close, like a little heartbeat. Send out a ripple, listen, then dive when it calls to you. I believe you’ll feel it.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I’ll read the water and track the pulse. Give me a moment—then I’ll bring it back.
</div>
</div>
<div class="game-challenge crystalhunt-zone">
<div id="crystalhunt-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Help with Valerie's Garden
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/valerie/dressed/valerie_at_garden.jpg" alt="Valerie at the Garden">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Morning light warms the herbs and wildflowers. Valerie lounges on a wicker chair, sun-kissed and smiling as she eyes the overgrown beds. “The garden’s a little chaotic today,” she says, “but chaos is just a dance waiting for rhythm.”
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face">
</div>
<div class="dialog-text brandi">
Help me guide the energy back into balance. A little weeding, a little watering… listen to what the plants ask for.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Got it. I’ll tune in and get these beds looking alive again.
</div>
</div>
<div class="game-challenge gardenhelp-zone">
<div id="gardenhelp-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Cleansing the Space
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/valerie/cleaning/valerie_living_room_1.jpg" alt="Valerie starting to clean the living room">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Valerie calls you for a different kind of favor: cleanse the house — physically and energetically. Incense, soft music, and a shared task that feels strangely intimate.
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face">
</div>
<div class="dialog-text valerie">
We’ll do this together. Living room first — dust, sweep, wipe — then the kitchen. After, a small ritual… and maybe a thank-you hug. Stay close, I’ll guide you.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
Lead and I’ll follow. Just say what you need.
</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="valerie-cleansing-content"></div>
<div id="carousel" class="carousel" style="margin-top:16px;">
<img src="img/chars/valerie/cleaning/valerie_living_room_1.jpg" class="carousel-img active" alt="Valerie Living 1">
<img src="img/chars/valerie/cleaning/valerie_living_room_2.jpg" class="carousel-img" alt="Valerie Living 2">
<img src="img/chars/valerie/cleaning/valerie_living_room_3.jpg" class="carousel-img" alt="Valerie Living 3">
<img src="img/chars/valerie/cleaning/valerie_living_room_4.jpg" class="carousel-img" alt="Valerie Living 4">
<img src="img/chars/valerie/cleaning/valerie_kitchen_1.jpg" class="carousel-img" alt="Valerie Kitchen 1">
<img src="img/chars/valerie/cleaning/valerie_kitchen_2.jpg" class="carousel-img" alt="Valerie Kitchen 2">
<img src="img/chars/valerie/cleaning/valerie_kitchen_3.jpg" class="carousel-img" alt="Valerie Kitchen 3">
<img src="img/chars/valerie/cleaning/valerie_kitchen_4.jpg" class="carousel-img" alt="Valerie Kitchen 4">
<img src="img/chars/valerie/cleaning/valerie_kitchen_5.jpg" class="carousel-img" alt="Valerie Kitchen 5">
<img src="img/chars/valerie/cleaning/valerie_hug_1.jpg" class="carousel-img" alt="Valerie Hug 1">
<img src="img/chars/valerie/cleaning/valerie_hug_2.jpg" class="carousel-img" alt="Valerie Hug 2">
<img src="img/chars/valerie/cleaning/valerie_hug_3.jpg" class="carousel-img" alt="Valerie Hug 3">
</div>
<div class="carousel-controls">
<<link "◀ Previous">>
<<run window.carouselPrevious()>>
<</link>>
<<link "Next ▶">>
<<run window.carouselNext()>>
<</link>>
</div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">
Mission: Move Valerie's Canvas
</p>
<div class="environment-container">
<div class="environment-image">
<img src="img/chars/valerie/dressed/valerie_at_sofa.jpg" alt="Valerie at the Sofa">
</div>
<p class="mission-narrative-focus" style="margin-top:10px;">
Valerie pats the space beside a massive canvas propped against the wall. “It wants sunlight in the living room,” she grins, stretching like a cat. “Strong hands, gentle soul. Think you can carry both?”
</p>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face">
</div>
<div class="dialog-text brandi">
Slow breaths, grounded feet. It’s a dance with gravity—feel for the balance point and tap when it’s right.
</div>
</div>
<div class="dialog-container">
<div class="dialog-image">
<img src="img/chars/player/player_face.png" alt="Player Face">
</div>
<div class="dialog-text player">
I’ll keep it steady. Just tell me where you want it.
</div>
</div>
<div class="game-challenge canvasmove-zone">
<div id="canvasmove-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Clear the Living Room</p>
<p class="mission-narrative-focus">Tool-match chores: windows, vacuum, couch — pick the right tool for each job as the room comes back to life.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">I went deep into a painting last night and the room paid for it. Help me put it right. I will stay with you through all of it.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Point me at it.</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="vhouseflow-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Help in the Kitchen</p>
<p class="mission-narrative-focus">Garlic, citrus, and a cooking sequence — rinse, heat, stir, plate. Wrong order burns the pan (and her patience).</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Stay and cook with me. Right order matters. Burn it and I will still smile — but I would rather not.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I can follow a recipe. Mostly.</div>
</div>
<div class="game-challenge jbike-challenge">
<div id="vkitchen-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Help Set Up Her Bedroom</p>
<p class="mission-narrative-focus">Memory match: pair each item with where it belongs in her bedroom — books, bowl, throw.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Come all the way in. Put things where they belong. Strong hands. Soft landings.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Tell me where each thing goes.</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="vthreshold-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Help Her Choose an Outfit</p>
<p class="mission-narrative-focus">Three looks hang open on the wardrobe. She is not asking a stylist — she is asking you to listen and pick with her.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Soft day, playful in-between, and something for later when the house is quiet. Match what I ask for.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Show me the options.</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="vcolor-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: An Honest Look</p>
<p class="mission-narrative-focus">Living room daylight. Fishnet. A dare about boldness with respect — not the bathroom, not secrecy under steam.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">If I am going to wear this for you out here, I want your eyes honest. Not grabbing. Not fake polite either.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I am not looking away.</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="vraw-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Something Left in the Bathroom</p>
<p class="mission-narrative-focus">Hotspot search: find what she left out in the bathroom, then handle the honesty carefully.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Do not dig like a thief. Look with care. When you find it... do not make me a punchline.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I will be careful.</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="vprivate-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Poolside Afternoon</p>
<p class="mission-narrative-focus">Leaves on the water, sun on the steps. Work first — then she decides how much trust the pool gets.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Help me clear the pool. Work first. Then water. If you stay through the whole thing... I might trust you with more than a bikini.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">Hand me the skimmer.</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="vpool-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Steam in the Hall</p>
<p class="mission-narrative-focus">Steam under the bathroom door. Water running. The latch is not thrown — left that way on purpose.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">(Through the water) If you are in the hall... you can wait. Or you can come closer. Just do not bang the door like a stranger.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">(Thinking) Careful steps. Not a smash-and-grab.</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="vsteam-content"></div>
</div>
</div><div class="game-container mission-task-container">
<p class="mission-objective-text">Mission: Evening on the Mat</p>
<p class="mission-narrative-focus">Candles, a half-unrolled mat, and a clear ask: set the room with her before the night stops being almost.</p>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/valerie/face/valerie_face.jpg" alt="Valerie Face"></div>
<div class="dialog-text valerie">Help me set this. Candles, mat, breath. After that... if you still want me, we stop calling it almost.</div>
</div>
<div class="dialog-container">
<div class="dialog-image"><img src="img/chars/player/player_face.png" alt="Player Face"></div>
<div class="dialog-text player">I want that. Tell me what to do first.</div>
</div>
<div class="game-challenge vclean-challenge">
<div id="valign-content"></div>
</div>
</div><<approachCharacter "openWorldGirls.valerie">><<silently>>
<<set _approach to [
"You catch her again coming out of the bathroom. Same towel. Same loose hair. Same little oh-it's-you smile that says she absolutely planned this.",
"\"You're early,\" she says, holding the towel exactly as low as she can without it slipping. \"The energy in the hall is *perfect* this morning.\"",
"She passes you in the hallway and her towel slips a little. She doesn't fix it for a few extra seconds. \"Oh — sorry, beautiful. Slippery hands.\""
].random()>>
<<set _during to [
"She makes a show of *not* making a show of it. She moves slowly. She bends. She reaches. The towel does what it does.",
"She stretches up to put a candle on the high shelf. The towel rides up. \"Oh, beautiful, would you mind?\" She's been mind-blocking you for *minutes*.",
"She arches against the doorframe and reaches up to fix her hair. The towel is held by faith and ritual at this point. She knows. You know."
].random()>>
<<set _outcome to [
"She tightens the towel finally and laughs. \"Goodness. The universe really wanted you to see that, didn't it?\"",
"She tucks the towel back at her chest and floats past you. \"Tea? I'm making chamomile.\" Like nothing happened. Like everything happened.",
"She kisses your cheek as she walks past. The towel brushes you. \"Mind the threshold. You're tracking energy in.\""
].random()>>
<<set _video to $scenes["VS001"].replay.videos.random()>>
<<applyReplay "VS001">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Valerie in her towel" style="max-width: 640px; border-radius: 8px;">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Step out into the garden->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She's already in downward dog when you walk in, hair pooled on the mat. She doesn't move. \"Just breathe with me, beautiful.\"",
"\"Join me?\" she asks without looking up from her practice. The leggings. The arch. You don't sit down.",
"She holds a pose by the window, sunlight catching every line of her body. \"The morning *needs* witnesses, sweet soul. Stay.\""
].random()>>
<<set _during to [
"She flows through the sequence slowly, deliberately. Each pose held a beat too long. Each transition lingered. She knows you're watching.",
"She rolls into a backbend and locks eyes with you upside-down. \"What do you see?\" she asks. \"Energy?\" Sure. Energy.",
"She moves into pigeon pose facing you. Just facing you. \"This one opens the hips. *Deeply.*\" It does."
].random()>>
<<set _outcome to [
"She comes out of the pose and sits cross-legged on the mat, breathing slow. \"Thank you for holding the energy with me.\" She bows her head.",
"She stretches her arms overhead and grins. \"Such powerful prana today. The room is *humming*. Can you feel it?\"",
"She rolls onto her back and looks at the ceiling. \"Mmm. I'm grounded. Beautifully grounded.\" She doesn't move for a minute."
].random()>>
<<set _video to $scenes["VS002"].replay.videos.random()>>
<<applyReplay "VS002">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Roll up the mat->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She's floating on her back when you arrive, hair fanned out around her like seaweed. She doesn't open her eyes. \"Come in, beautiful. The water's vibrating.\"",
"\"You always know when to come,\" she says, climbing out of the pool in slow motion, water streaming everywhere. \"The universe sends you.\"",
"She's perched on the edge, feet in the water, sunhat tilted low. \"Sit with me, sweet soul. The pool spirits are *very* communicative today.\""
].random()>>
<<set _during to [
"She moves through the water in lazy circles, her swimsuit clinging in all the soft places. She tells you about a dream she had. You barely register a word.",
"She floats over to you and rests her elbows on your knees. \"The water is teaching me things, beautiful. Mostly about you.\" She kisses your knee.",
"She climbs out and lies face-down on the lounger, ties undone. \"Do my back, would you? Just the shoulders. The energy gets *stuck* there.\""
].random()>>
<<set _outcome to [
"She wraps a towel around her shoulders and sighs. \"This is what the soul comes here for. Thank you.\"",
"She kisses you on the temple and goes inside to make tea. The pool is suddenly very empty without her in it.",
"She slides back into the water with a contented hum. \"Stay as long as you'd like, beautiful. The pool keeps secrets.\""
].random()>>
<<set _video to $scenes["VS003"].replay.videos.random()>>
<<applyReplay "VS003">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/pool.jpg" alt="Valerie's Pool">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Towel off->PoolValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She lights the candles. She always lights the candles first. \"Sit with me, beautiful. Let's release what doesn't serve.\"",
"\"You're carrying tension again,\" she says, taking your hand in both of hers. \"Lay back. We need to *open* you.\"",
"She closes the curtains and dims the lamps. \"Just relax. The energy will tell us what it needs.\" She kneels beside the couch."
].random()>>
<<set _during to [
"Her hands move over you with the same slow ritual as a massage. The pace doesn't change even as the intensity builds. She's *focused*. She's working on you.",
"She breathes in time with her hands. \"Stay with me, beautiful. Stay with me.\" Her eyes are half-closed, lips parted. Channeling something.",
"She murmurs about chakras and energy meridians while her hand keeps moving. By the time she stops talking, you've stopped listening."
].random()>>
<<set _outcome to [
"She wipes her hands on the cloth she keeps for this purpose and smiles serenely. \"There. That's so much better. The flow is *unblocked*.\"",
"She kisses your forehead and rests her hand over your heart for a long moment. \"Beautiful work, sweet soul.\"",
"She blows out the candles one by one. \"Tea?\" she asks softly, like the last hour was a meditation session and not the hottest thing you've ever experienced."
].random()>>
<<set _video to $scenes["VS004"].replay.videos.random()>>
<<applyReplay "VS004">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Sit up slowly->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She greets you at the door already barefoot, with mala beads in her hair. \"Perfect. The morning energy needs *grounding*. Through the body.\"",
"\"You came early,\" she says, smiling like she's caught the universe in a kindness. \"Lay down. Let me work.\"",
"She closes the front door behind you and lights a stick of palo santo. \"Down to the bones today, beautiful. We work *deep*.\""
].random()>>
<<set _during to [
"Sunlight through the curtains. The smell of palo santo. Her hand on you with monk-like patience. The ritual becomes hypnotic.",
"She works the same area for what feels like an hour. \"The base chakra needs more care than people realize, beautiful.\" Indeed.",
"She hums softly while her hand moves. The hum makes it harder, somehow. Like she's chanting you to a finish."
].random()>>
<<set _outcome to [
"She washes her hands in the kitchen sink and comes back with two cups of tea. \"That was a *strong* alignment. Drink. Hydrate. Be present.\"",
"She presses her palm flat against your sternum and closes her eyes. \"Beautiful. Beautifully done.\" She means it.",
"She rolls up her mat and stretches. \"You'll feel it for hours. The body remembers good work.\""
].random()>>
<<set _video to $scenes["VS005"].replay.videos.random()>>
<<applyReplay "VS005">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/livingroom.jpg" alt="Valerie's Living Room">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Drink the tea->LivingRoomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She closes the bedroom door and lights three candles in a triangle. \"Sit. Tonight I want to give you something deeper.\"",
"She finds you in the hallway and takes your hand. \"My bedroom. Now. Don't speak. Just feel.\" You follow.",
"Her bedroom smells of lavender. She's already on her knees beside the bed. \"You'll need to lie back, beautiful. This works *layered*.\""
].random()>>
<<set _during to [
"She climbs onto you and presses her chest against you in slow waves. \"Breathe with me. *Deep.*\" The soft skin. The candlelight. The way she watches your face.",
"She rocks above you, her breasts heavy and warm against your skin. She murmurs under her breath. \"Stay. Stay. Stay.\"",
"She finds the rhythm she's looking for and holds it. The whole world narrows to her body and the slow pressure she's building. You forget your own name for a while."
].random()>>
<<set _outcome to [
"She rolls off and lies beside you, one hand resting on your stomach. \"That,\" she whispers, \"that was *real* work. Beautiful.\"",
"She blows out two of the three candles and leaves the last one burning. \"Stay until the candle's done. Then go in peace.\"",
"She kisses you on the mouth, soft and unhurried. \"The body received that. Thank you, sweet soul.\""
].random()>>
<<set _video to $scenes["VS006"].replay.videos.random()>>
<<applyReplay "VS006">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Watch the candle burn->BedroomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"She finds you in the dark hallway and presses you against the wall. \"Tonight is primal,\" she whispers. \"No words.\" You don't argue.",
"Her bedroom is dark except for one candle. She's sitting on the floor at the foot of the bed. She gestures for you to sit on the bed. You sit.",
"\"You felt it, didn't you,\" she says, locking the bedroom door. \"The energy is *raw* tonight. We have to release it.\""
].random()>>
<<set _during to [
"Her mouth on you in candlelight. Her hands on your thighs. No words at all — just her humming low in her throat the entire time.",
"She works you with full intent. There's nothing dreamy about her now. The bohemian act is gone. She *wants* this.",
"She doesn't break the rhythm for anything. She doesn't come up for air. She doesn't look away. She doesn't stop until you're done."
].random()>>
<<set _outcome to [
"She crawls onto the bed and rests her head on your stomach, completely still. \"Beautiful. *Beautiful.* The energy moved exactly the way it needed to.\"",
"She finally sits back, wipes her chin with the back of her wrist, and laughs softly. \"There. The room is *quiet* now. Can you feel it?\"",
"She kisses up your stomach to your chest to your mouth. \"Stay tonight. Just sleep here. The energy needs to set.\""
].random()>>
<<set _video to $scenes["VS007"].replay.videos.random()>>
<<applyReplay "VS007">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline style="max-width: 640px; border-radius: 8px;">
<source @src="_video" type="video/webm">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<p class="spy-narrative"><<= _outcome>></p>
<div class="menu-buttons">
[[Leave her bedroom->BedroomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"Steam rolls under the bathroom door again. She left it cracked on purpose — the same soft invitation as before.",
"\"Beautiful?\" her voice floats through water. \"If you are in the hall... the shower still welcomes witnesses.\"",
"You find the bathroom half-open, fog on the glass. She knows. She always knows."
].random()>>
<<set _during to [
"Soap slides over her breasts. She rinses slowly, body angled toward the open door.",
"She braces against the tile and washes between her thighs with deliberate care.",
"She turns, spreads, and holds the pose a beat too long — not for cleanliness. For you."
].random()>>
<<set _outcome to [
"She blows a kiss toward the steam. \"That was enough for today. Go. Let it settle.\"",
"The water shuts off. \"Thank you for holding the gaze.\" Towel, smile, gone.",
"She peeks around the curtain, hair dripping. \"Come back when the steam asks again.\""
].random()>>
<<set _video to $scenes["VS008"].replay.videos.random()>>
<<applyReplay "VS008">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bathroom.jpg" alt="Valerie's Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the bathroom->BathroomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"The bathroom light is on. She does not jump when you appear — only smiles, toy still in her hand.",
"You catch her mid-private moment again. She sets the vibrator on the counter and meets your eyes.",
"\"You always arrive when I am least performing,\" she murmurs. \"Come in. No shame in this room.\""
].random()>>
<<set _during to [
"She talks about breath and release while the toy rests between you. The honesty is more intimate than the device.",
"She does not hide it. She lets you see how spiritual language folds around a very physical need.",
"\"Private tools,\" she says softly, \"are just another way the body tells the truth.\""
].random()>>
<<set _outcome to [
"She tucks it away. \"Thank you for not flinching. That matters more than you know.\"",
"She kisses your cheek, flushed and calm. \"For now, that is enough.\"",
"She laughs under her breath. \"Next time, maybe you help.\""
].random()>>
<<set _video to $scenes["VS009"].replay.videos.random()>>
<<applyReplay "VS009">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bathroom.jpg" alt="Valerie's Bathroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<img @src="_video" alt="Valerie's private moment">
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to the bathroom->BathroomValerie]]
</div>
</div><<silently>>
<<set _approach to [
"The mat is already unrolled. Candles burn low. \"Come align with me again,\" she says.",
"She closes the bedroom door and takes your hand. \"No performance tonight. Just us.\"",
"She is waiting on the mat, hair falling forward. \"Stop pretending this is only yoga.\""
].random()>>
<<set _during to [
"She rides you with the same deliberate breath as her practice — slow, deep, eyes open.",
"She moves through positions like a sequence, moaning when you bottom out inside her.",
"When you finish inside her she gasps, holds you there, and whispers that she can feel the heat settling."
].random()>>
<<set _outcome to [
"She takes a mirror selfie of the two of you afterward — messy and calm.",
"She presses a palm to her lower belly and smiles. \"Still warm.\"",
"She kisses you slow and deep. \"Come back when the mat calls again.\""
].random()>>
<<set _video to $scenes["VS012"].replay.videos.random()>>
<<applyReplay "VS012">>
<</silently>>
<div class="game-container">
<div class="environment-container">
<div class="environment-image">
<img src="img/layout/valerie_house/bedroom_valerie.jpg" alt="Valerie's Bedroom">
</div>
<p class="spy-narrative"><<= _approach>></p>
</div>
<div class="environment-container">
<div class="environment-image">
<video controls autoplay loop muted playsinline>
<source @src="_video" type="video/mp4">
</video>
</div>
<p class="spy-narrative"><<= _during>></p>
</div>
<div class="environment-container">
<p class="spy-narrative"><<= _outcome>></p>
</div>
<div class="menu-buttons">
[[Return to Valerie's bedroom->BedroomValerie]]
</div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-chakra-checkup-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-deeper-alignment-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-energy-release-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-poolside-thanks-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-primal-energy-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-towel-encounter-content"></div>
</div><div class="game-container spy-scene-container">
<!-- O JavaScript irá renderizar dinamicamente o conteúdo da cena aqui -->
<div id="valerie-yoga-glimpse-content"></div>
</div><div class="game-container spy-scene-container">
<div id="valerie-shower-spy-content"></div>
</div><div class="game-container spy-scene-container">
<div id="valerie-private-frequency-content"></div>
</div><div class="game-container spy-scene-container">
<div id="valerie-sacred-union-content"></div>
</div>